本地类型作为C++中的模板参数

Ron*_*nga 36 c++ templates

这是我的代码

#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;
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误

template argument for ‘template<class T, template<class> class C> struct FooBar’ uses local type ‘main()::Local’

标准的哪一部分说这是错的?我正在使用gcc 4.5.1.如何使这段代码有效?

Jam*_*lis 31

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

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

本地型,没有键,无名类型或任何这些类型的配混一个类型的类型不应被用作模板参数为模板类型参数.


如何使这段代码有效?

不要使用本地类型作为模板参数.

请注意,此限制已在C++ 11中解除,因此使用该语言标准,您可以使用本地类型作为模板参数.


Pra*_*rav 8

14.3.1/2

本地类型,没有链接的类型,未命名的类型或从这些类型中的任何类型复合的类型不应该用作模板类型参数的模板参数.

尝试使用-std=c++0x选项(gcc 4.5.1)编译代码.C++ 0x解除了限制,因此您可以使用本地类型作为模板参数.