#c #c 20 #c -concepts
#c #c 20 #c -понятия
Вопрос:
using T = decltype(std::same_as<int, double>)
Я пробовал это на VS2019. Оказывается, что T = bool
.
Это определяется стандартом или просто свойством конкретных компиляторов? Я не нашел никакой официальной информации об этом .. https://en.cppreference.com/w/cpp/concepts
Ответ №1:
Подобный идентификатор понятия std::same_as<int, double>
вычисляется как выражение. Он выдает значение типа bool
prvalue .
[temp.names]
8 Идентификатор понятия — это идентификатор простого шаблона, где имя шаблона является именем понятия. Идентификатор понятия является значением типа bool и не определяет специализацию шаблона. Идентификатор понятия оценивается как true, если нормализованное выражение ограничения понятия удовлетворяется ([temp.constr.constr]) указанными аргументами шаблона и false в противном случае.
So decltype
сообщает об этом правильно. В выражении это a bool
.
Комментарии:
1. Кстати, ваша ссылка на документацию библиотеки стандартных понятий. Для языковой функции см. en.cppreference.com/w/cpp/language/constraints#Concepts — В нем упоминается , как в качестве выражения оно производит
true
илиfalse
. Следовательноbool
, там подразумевается тип.