Нашел ли я ошибку в Clang?

Я попытался скомпилировать приведенный ниже код с помощью Clang

class Prasoon{

  static const int dummy = 0;

};
int const Prasoon::dummy = 0;

int main(){}

Приведенный выше код не выдал никакой ошибки при компиляции с 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 ?

12
задан Prasoon Saurav 21 August 2010 в 13:11
поделиться

2 ответа

Да, вы обнаружили ошибку.

Правило выражено в стандарте:

9.4.2-3: Если статический член данных имеет значение const буквальный тип, его объявление в определение класса может указывать фигурная скобка или равный инициализатор, в котором каждое предложение инициализатора, которое является выражение-присваивание является константой выражение. Статический член данных буквальный тип может быть объявлен в определение класса с помощью constexpr спецификатор; если да, то его декларация должен указать фигурная скобка или равный инициализатор, в котором каждое предложение инициализатора, которое является выражение-присваивание является константой выражение. [Примечание: в обоих случаях член может появиться в постоянные выражения. - конечное примечание] член по-прежнему определяется в область пространства имен, если она используется в программа и область пространства имен определение не должно содержать инициализатор.

9
ответ дан 2 December 2019 в 21:22
поделиться

Да, это действительно ошибка. Я наткнулся на ваш отчет об ошибке в clang - спасибо, что нашли время отправить его :) Хотя эта ошибка была первоначально зарегистрирована как ошибка 4/23/10, ваше сообщение привлекло мое внимание, и я отправил простой патч на рассмотрение группе разработчиков.

4
ответ дан 2 December 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: