Явное преобразование типов и несколько простых спецификаторов типов

Чтобы значение инициализировать объект типаTможно было бы сделать что-то вроде одного из следующих:

T x = T();
T x((T()));

Мой вопрос касается типов, указанных комбинацией простых спецификаторов типов, например:unsigned int

unsigned int x = unsigned int();
unsigned int x((unsigned int()));

Visual C ++ 2008 и Intel C ++ Compiler 11.1 принимают оба из них без предупреждений; Comeau 4.3.10.1b2 и g ++ 3.4.5 (что, по общему признанию, не особенно новое) не делают.

Согласно стандарту C ++ (C ++ 03 5.2.3 / 2, expr.type.conv):

ВыражениеT(), гдеT является спецификатором простого типа (7.1.5.2) для завершенного типа объекта, не являющегося массивом, или (возможно, cv-квалифицированного)void type, создает значение r указанного типа, которое инициализируется значением

7.1.5.2 говорит "Спецификаторы простого типа: и следует со списком, который включает в себяunsigned а также .int

Поэтому, учитывая, что в 5.2.3 / 2 "простой тип спецификатор» единственное число, иunsigned а такжеint два спецификатора типа, приведенные выше примеры, которые используютunsigned int недействительным? (и, если да, то разве это неправильно для Microsoft и Intel поддерживать указанные выражения?)

Этот вопрос скорее из любопытства, чем что-либо еще; для всех типов, указанных комбинацией нескольких простых спецификаторов типов, инициализация значения эквивалентна нулевой инициализации. (Этот вопрос был вызванкомментарии в ответ на этот ответ на вопрос об инициализации).

Ответы на вопрос(4)

Ваш ответ на вопрос