c++中作为模板参数的局部类型

Local type as template arguments in C++

本文关键字:参数 局部 类型 c++      更新时间:2023-10-16

这是我的代码

#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。如何使这些代码工作?

标准的哪一部分说这是错误的?

这将是2003年c++标准中的§14.3.1/2:

局部类型、没有链接的类型、未命名类型或由这些类型组合而成的类型不得用作模板类型形参模板实参


如何使这段代码工作?

不要使用局部类型作为模板参数

注意,这个限制在c++ 11中已经取消了,因此使用该语言标准,您可以使用局部类型作为模板参数。

14.3.1/2

局部类型、没有链接的类型、未命名类型或由这些类型复合而成的类型,不得用作模板类型形参的模板实参。

尝试使用-std=c++0x选项(gcc 4.5.1)编译代码。c++ 0x取消了这个限制,所以你可以使用局部类型作为模板参数。