2014-01-17 4 views
0

я нашел a decltype-related question and its answers, в котором как OP и кажется, отвечающими предположить, что decltype(t,u) является то, что зависит от типов обоих t и u.Значение `decltype` с более чем одним аргументом

Я полагаю, что предполагаемый смысл decltype(t,u) в связанном вопросе является то, что из минимального типа, совместимого с как tu и, в некотором смысле минимальной и совместимы. Если он имел в виду, как общего типа как и в § 5 (9), либо в определении из std::common_type из §20.9.7.6 (3), то предполагаемое значение будет decltype(true ? t : u).

Однако, похоже, что C++ 11 определяет только один аргумент decltype. Тем не менее, синтаксический анализатор указан принимать decltype(выражение) где выражение может быть разделенный запятыми список назначения экспрессии. Повторное чтение спецификации decltype из §7.1.6.2 (4), Я должен интерпретировать decltype(t,u) как decltype((u)).

Вопрос: Итак, что же такое decltype(t,u)? Я что-то упускаю?

Изменить: ответы сходятся на «это оператор запятая», я все еще хотел бы видеть ваше суждение о ли это decltype((u)) (ссылка на объявленный тип) или decltype(u) (объявленный тип). Я подозреваю, что первый.

ответ

2

Запятая здесь является оператором, а не аргумент Сепаратор

+0

Спасибо, я подозревал это. Но согласен ли я в своей интерпретации, что это возвращает возвращаемый тип a * reference * к объявленному типу 'u', то есть' decltype ((u)) 'вместо' decltype (u) '? – ccorn

+0

Я не уверен, что следую. Почему круглые скобки должны делать что-то типа содержимого? – qwm

+1

['decltype' является особенным в этом отношении] (http://en.cppreference.com/w/cpp/language/decltype). – ccorn

1

это использовать оператор запятой. так что t, u имеет тип u.

+0

Предположим, что 'decltype (u)' дает некоторый тип 'U' (* объявленный * тип' u') , то 'decltype ((u))' и 'decltype ((t, u))' будет типом 'U &'. Поэтому, если предположить, что 'decltype (t, u)' является таким же, как 'decltype ((t, u))', это должно быть таким же, как 'decltype ((u))', а не как 'decltype (u) ', правильно? – ccorn

Смежные вопросы