c++中作为模板参数的局部类型
Local type as template arguments in C++
这是我的代码
#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取消了这个限制,所以你可以使用局部类型作为模板参数。
相关文章:
- 将共享指针传递给函数参数 - 将其分配给局部变量的正确方法是什么
- 如何在 C++ 的 lambda 函数中传递同名的局部变量和参数(使用此关键字)?
- 在返回参数列表中C++局部变量(如CodeFights所示)
- 在 pthread_create() 中使用局部变量作为参数有效吗?
- 指针或局部变量,用于函数的输出参数
- C 11-当我将局部变量作为参数传递到线程中时,它是否安全
- 通过引用参数将局部变量分配给
- 如何将带有局部变量的一些参数的函数包装器放入具有MSVC2015的容器中
- C++ 对局部变量的引用与对参数的引用
- 局部变量作为非类型参数,具有模板规范
- 局部变量的内存地址根据 lambda 参数的预感而变化
- pthread_create以局部变量作为参数
- 为什么我不能将局部变量的引用作为非类型模板参数?
- 将局部函数作为参数传递给全局函数
- 将引用参数分配给局部变量
- 为什么函数中的局部数组不能接受一个不稳定的参数?在c++中
- 作为非typename参数的局部变量
- 如何迭代可变模板参数来创建可变数量的局部变量
- 直接使用函数参数vs创建局部变量
- 声明一个基于函数参数的局部数组在c++中是合法的