"Definition differs from the declaration in the return type " build failure(s) — clang 3.4.2

For some reasons, clang refuses the following syntax while g++ accepts it:
#include <streambuf>

struct S { typedef int fd_type; };

template  class A : public std::basic_streambuf, public S
{ fd_type& foo(); };

template  typename A::fd_type& A::foo()
{ return NULL; }

No error detected for version 3.4.2