[英]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子句都是一個常量表達式。 [注意:在這兩種情況下,成員可能會出現在常量表達式中。 - 結束注釋] 如果在程序中使用該成員,並且命名空間作用域定義不包含初始化程序,則該成員仍應在命名空間作用域中定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.