本地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作为模板参数。