繁体   English   中英

我在Clang中发现了一个错误吗?

[英]Have I found a bug in Clang?

我试着用Clang编译下面的代码

class Prasoon{

  static const int dummy = 0;

};
int const Prasoon::dummy = 0;

int main(){}

使用Clang.编译时,上面的代码没有给出任何错误Clang.

prasoon@prasoon-desktop ~ $ clang++ --version
clang version 2.8 (trunk 107611)
Target: i386-pc-linux-gnu
Thread model: posix
prasoon@prasoon-desktop ~ $ cat bug.cpp
class Prasoon{

      private:
      static const int dummy = 0;

    };

int const Prasoon::dummy = 0;

int main(){}
prasoon@prasoon-desktop ~ $ clang++ bug.cpp
prasoon@prasoon-desktop ~ $ 

但是当我使用g++编译相同的代码时,我得到了一个错误。

prasoon@prasoon-desktop ~ $ g++ bug.cpp
bug.cpp:8: error: duplicate initialization of ‘Prasoon::dummy’

我在Clang发现了一个错误吗?

是的,你发现了一个bug。

该规则在标准中表达:

9.4.2-3:如果静态数据成员是const文字类型,则它在类定义中的声明可以指定一个大括号或等于初始化器,其中作为赋值表达式的每个initializer子句都是一个常量表达式。 可以使用constexpr说明符在类定义中声明文字类型的静态数据成员; 如果是这样,它的声明应指定一个大括号或等于初始化器,其中作为赋值表达式的每个initializer子句都是一个常量表达式。 [注意:在这两种情况下,成员可能会出现在常量表达式中。 - 结束注释] 如果在程序中使用该成员,并且命名空间作用域定义不包含初始化程序,则该成员仍应在命名空间作用域中定义。

是的,这确实是一个错误。 我偶然发现了你的错误报告 - 感谢花时间提交它:)虽然这个错误最初在4月23日被记录为错误 ,但是你的提交引起了我的注意,我提交了一个简单的补丁给开发者小组进行审核。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM