Дубликаты CV квалификаторов - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть простой кусок кода:

const const int a = 10;

Не удается скомпилировать с gcc :

error: duplicate 'const'

Однако clang компилирует его с предупреждением:

warning: duplicate 'const' declaration specifier [-Wduplicate-decl-specifier]

Компилятор Microsoft также генерирует предупреждение.

Также ситуация с квалификатором volatile такая же.

Из [dcl.type] (http://www.open -std.org / jtc1 / sc22 / wg21 / docs / documents / 2017 / n4713.pdf ):

Как правило, самое большееодин определяющий тип-спецификатор разрешен в полном decl-specier-seq объявления или в определяющем типе-спецификаторе-seq, и не более одного спецификатора типа допускается в type-specier-seq.Единственными исключениями из этого правила являются следующие:

(2.1) const можно комбинировать с любым спецификатором типа, кроме самого себя.

(2.2) volatile можно комбинировать с любым спецификатором типа, кроме самого себя.

(2.3) со знаком или без знака можно комбинировать с типом char, long, short или int.

(2.4) можно комбинировать как short или long с int.

(2.5) long можно комбинировать с double.

(2.6) long можно комбинировать с long.

Так что я не совсем понимаю, что означает «как правило»,Является ли это формально действительным или нет?

Также я обнаружил связанную проблему Допустимый повторяющийся квалификатор const разрешен в C, но не в C ++? , но в основном обсуждаются различия между c и c ++.

...