Template aliases, as described in N2258[1], are not fully implemented. Specifically, they do not work if the type being aliased is itself a template. Simple test case (taken from Wikipedia[2]): template <typename First, typename Second, int Third> class SomeType; class OtherType; template <typename Second> using TypedefName = typename SomeType<OtherType, Second, 5>; int main() { return 0; } This fails to compile with the error: $ gcc -std=c++11 template-alias.cpp template-alias.cpp:6:30: error: expected nested-name-specifier [1] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf [2] http://en.wikipedia.org/wiki/C++11#Alias_templates
The correct syntax is: template <typename Second> using TypedefName = SomeType<OtherType, Second, 5>; ie, no "typename". You can find a good set of examples in the testsuite as: testsuite/g++.dg/cpp0x/alias-decl-*