GCC似乎并不赞成使用本地类实例化模板:
template <typename T>
void f(T);
void g()
{
struct s {};
f(s()); // error: no matching function for call to 'f(g()::s)'
}
VC不抱怨。
应该怎么做?
答案 0 :(得分:12)
在C ++ 03中无法完成,但C ++ 0x会lift这个限制。
C ++ 03,§14.3.1/ 2 :
本地类型,没有链接的类型,未命名的类型或从这些类型中复合的类型不得用作模板类型参数的模板参数。