模板化代码在G ++下工作正常,但在VC ++下出错

时间:2016-02-28 12:18:08

标签: c++ language-lawyer

以下是代码,在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:表达式未评估为常量

1 个答案:

答案 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;
}