http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48934
--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-05-09 16:24:51 UTC --- (In reply to comment #6) Oops, no, that's a mistake, the parameter should be named 't' template<typename T> struct S1 { typedef char type; }; template<typename T> typename S1<T>::type foo(typename S1<T>::typo t) { return t; } char c = foo<int>(1);