【发布时间】:2011-03-22 21:01:34
【问题描述】:
我希望下面的代码可以工作,但我收到了编译错误:
error C2975: 'n' : invalid template argument for 'foo', expected compile-time constant expression
#include <iostream>
using namespace std;
template<int N>
struct foo
{
foo() { cout << N << endl; }
};
int main()
{
foo< __LINE__ > f;
}
为什么会这样?我虽然 __LINE__ 会在模板实例化发生之前粘贴行号?
如果我想这样做,我应该只引入一个static const int 来保存行号还是有标准解决方案?
【问题讨论】:
-
什么版本?在VS2010中工作。 (我以前做过,但还是尝试了你的代码。)
-
@GMan:很有趣,在 VS2010 中也进行了测试,但对我不起作用。 o_O(或者你的意思是在全局范围内定义
static const int?这实际上会破坏目的......) -
@GMan:我正在运行 2010 年的全新安装。
-
@Bob: @Xeo: Wtf...什么版本?我的:“10.0.30319.1 RTMRel”。
-
@Bob:如果您启用
/ZI(编辑并继续调试)选项,禁用此选项是否可以解决问题?
标签: c++ visual-studio