簡體   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