在ctor声明/定义中接受const限定符(llvm bug?)

时间:2013-11-12 17:27:14

标签: c++ gcc constructor const clang

我的编译器(实际上是Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn))接受(编译)该代码:

class X {
private:
  int i;
public:
  const X() { cout << "here" << endl; i=0; }
  void f() const {}
  void g() {}
};

int main() {
  const X x;
  x.f();
  //  x.g();
  X y;
  y.f();
  y.g();
}

就好像没有const限定符引导ctor定义一样。我尝试了-Wall-pedantic不同类型的标准激活,总是一样......所以:

  • 我错过了什么吗?我无法在最新标准中发现它在语法上是正确的......
  • 这是gcc / llvm的错误吗?似乎gcc/llvm默默地忽略了const
  • 这是我错过的一个功能,我的例子无法证明它的实用性吗?

注意:gcc 3.4.3不编译它,也不编译gcc 4.4.5。

1 个答案:

答案 0 :(得分:3)

据我所知,这似乎不是有效的语法,draft C++ standard部分12.1 构造函数 1 表示:

  

构造函数没有名称。特殊的声明符语法用于声明或定义构造函数。   语法使用:

     
    

- 一个可选的decl-specifier-seq,其中每个decl-specifier都是一个函数说明符或constexpr,

         

- 构造函数的类名和

         

- 参数列表

  

我们可以从7.1.2 部分看到函数说明符如下:

function-specifier:
 inline
 virtual
 explicit

在[{3}} a comment above中通过Ali提交了相关信息,并确认并解决了该问题。