3

GCC 似乎不赞成使用本地类实例化模板:

template <typename T>
void f(T);

void g()
{
    struct s {};

    f(s()); // error: no matching function for call to 'f(g()::s)'
}

VC没有抱怨。

应该怎么做?

4

1 回答 1

12

在 C++03 中无法做到这一点,但 C++0x 将解除该限制。

C++03,第 14.3.1/2 节

本地类型、没有链接的类型、未命名类型或由这些类型中的任何一种组合而成的类型不应用作模板类型参数的模板参数。

于 2010-07-03T21:18:57.247 回答