я нашел a decltype
-related question and its answers, в котором как OP и кажется, отвечающими предположить, что decltype(t,u)
является то, что зависит от типов обоих t
и u
.Значение `decltype` с более чем одним аргументом
Я полагаю, что предполагаемый смысл decltype(t,u)
в связанном вопросе является то, что из минимального типа, совместимого с как t
u
и, в некотором смысле минимальной и совместимы. Если он имел в виду, как общего типа как и в § 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)
(объявленный тип). Я подозреваю, что первый.
Спасибо, я подозревал это. Но согласен ли я в своей интерпретации, что это возвращает возвращаемый тип a * reference * к объявленному типу 'u', то есть' decltype ((u)) 'вместо' decltype (u) '? – ccorn
Я не уверен, что следую. Почему круглые скобки должны делать что-то типа содержимого? – qwm
['decltype' является особенным в этом отношении] (http://en.cppreference.com/w/cpp/language/decltype). – ccorn