【发布时间】:2011-04-22 03:23:59
【问题描述】:
这是我的代码
#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。如何使这段代码工作?
【问题讨论】:
-
您是否使用
--std=c++0x选项进行编译? -
不,我没有使用那个选项。
-
啊,这种能力直到 C++0x 才成为标准。请参阅 N2657 (open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm)。只需添加该选项,g++ 就会对您感到满意。
-
en.cppreference.com/w/cpp/language/class#Local_classes : "本地类不能用作模板参数(C++11 前)"