#include <iostream>
#include <vector>
int main()
{
class Int {
public:
Int(int _i) : i(i) {}
private:
int i;
};
std::vector<Int> VI;
}
我尝试编译上面的代码并收到以下错误消息:
foo.cc: In function 'int main()':
foo.cc:13: error: 'main()::Int' uses local type 'main()::Int'
foo.cc:13: error: trying to instantiate 'template<class _Alloc> class std::allocator'
foo.cc:13: error: template argument 2 is invalid
foo.cc:13: error: invalid type in declaration before ';' token
你们有没有人能告诉我为什么我不能在C ++中做这样的事情?提前谢谢。
答案 0 :(得分:11)
该标准明确禁止使用本地类来实例化14.3.1 [temp.arg.type] / 2中的模板。
本地类型,没有链接的类型,未命名的类型或从这些类型中复合的类型不得用作模板类型参数的模板参数。
这将在C ++ 0x中更改。