以下是代码,在g++
下可以正常使用,但在VC++ 2014
下会出错:
template <class A>
struct Expression
{
public:
static const int status = A::status_;
};
struct Foo : public Expression<Foo>
{
static const int status_ = 0;
};
int main(void) {
return 0;
}
为什么?谢谢!
错误消息是:
错误C2039:&#39;状态_&#39;:不是&#39; Foo&#39;
的成员错误C2065:&#39;状态_&#39;:未声明的标识符
错误C2131:表达式未评估为常量
答案 0 :(得分:2)
定义status
,它会起作用。见下文。至于标准,我不知道哪个编译器是正确的。
template <class A>
struct Expression
{
public:
static const int status;
};
struct Foo : public Expression<Foo>
{
static const int status_ = 0;
};
template< typename A >
const int Expression<A>::status = A::status_;
int main( void ) {
return 0;
}