Можно ли использовать понятия (C 20) как логическое значение?

#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 , там подразумевается тип.