#c #c -concepts #c 20
#c #c -концепции #c 20
Вопрос:
Как получить константное выражение типа bool из концепции и типа?
template<class T>
concept Valid = requires(T t) {
{ t.x };
};
struct ValidExample { int x; };
struct InValidExample {};
static_assert(?); // ValidExample is Valid
static_assert(?); // InValidExample is not Valid
Я начинаю играть с концепциями, и я хотел бы проверить тип на соответствие концепции (если быть более точным: определить признак из концепции). Как это сделать?
Ответ №1:
Вы могли бы использовать:
static_assert(Valid<ValidExample>); // ValidExample is Valid
static_assert(!Valid<InValidExample>); // InValidExample is not Valid
в качестве переменных шаблона (типа bool
).
Комментарии:
1. <вставить facepalm>
2. @YSC — Кто бы мог подумать, что шумный
bool concept
синтаксис может иметь реальную ценность 🙂3. @bartop: В этом нет ничего странного. Концепция — это просто шаблон переменной . Вы получаете к ней доступ, как к любому другому шаблону переменных.
4. @StoryTeller Какое значение?
5. @Barry — Намекает на использование в качестве логической константы. Это должно было быть ироничным, tbh.