本地types作为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:
一个本地types,一个没有链接的types,一个未命名的types或者从这些types中复合的types都不能被用作模板types参数的模板参数 。
如何使这个代码工作?
不要使用本地types作为模板参数。
请注意,这个限制已经在C ++ 11中解决了,所以使用这种语言标准,你可以使用本地types作为模板参数。
14.3.1 / 2
一个本地types,一个没有链接的types,一个未命名的types,或者任何这些types复合的types都不能被用作模板types参数的模板参数。
尝试使用-std=c++0x
选项编译代码(gcc 4.5.1)。 C ++ 0x提升限制,所以你可以使用本地types作为模板参数。