这是我的代码
#include <vector>
template <typename T, template<typename> class C = std::vector >
struct FooBar
{
/*codez*/
};
template<typename T>
struct Global{};
int main()
{
struct Local{};
FooBar<Local,Global> k;
}
这是我得到的错误
template argument for ‘template<class T, template<class> class C> struct FooBar’ uses local type ‘main()::Local’
标准的哪一部分说这是错的?我正在使用gcc 4.5.1。如何使这段代码有效?
答案 0 :(得分:30)
标准的哪一部分说这是错的?
这将是2003 C ++标准中的§14.3.1/ 2:
本地类型,没有链接的类型,未命名的类型或从这些类型中复合的类型不得用作模板 type-parameter的 template-argument
如何使这段代码有效?
不要使用本地类型作为模板参数。
请注意,此限制已在C ++ 11中解除,因此使用该语言标准,您可以使用本地类型作为模板参数。
答案 1 :(得分:8)
14.3.1 / 2
本地类型,没有链接的类型,未命名的类型或从这些类型中复合的类型不得用作模板类型参数的模板参数。
尝试使用-std=c++0x
选项(gcc 4.5.1)编译代码。 C ++ 0x解除了限制,因此您可以使用本地类型作为模板参数。