http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17693
--- Comment #2 from Manuel López-Ibáñez <manu at gcc dot gnu.org> 2011-10-22 14:14:18 UTC --- GCC 4.7 does away with the typedefs completely: pr17693.cc: In instantiation of ‘void A::g() [with T = int]’: pr17693.cc:13:16: required from here pr17693.cc:8:5: error: ‘a’ is not a member of ‘int’ pr17693.cc: In instantiation of ‘void B::f(T, U) [with T = int; U = char]’: pr17693.cc:32:35: required from here pr17693.cc:27:5: error: invalid conversion from ‘char’ to ‘void*’ [-fpermissive] pr17693.cc:21:8: error: initializing argument 1 of ‘void B::g(void*, B::mysize_t)’ [-fpermissive] which in this case doesn't look so bad, but with very deeply nested stuff, it probably looks awful.