Нашел ли я ошибку в Clang? - PullRequest
12 голосов
/ 20 августа 2010

Я попытался скомпилировать приведенный ниже код с помощью 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?

Ответы [ 2 ]

9 голосов
/ 20 августа 2010

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

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

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

4 голосов
/ 23 августа 2010

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

...