Подтверждено, что в следующем стандарте c++20
, в соответствии с , в этом отчете Reddit из недавнего Кельнского совещания ISO C++, мы сможем указать шаблон Концепция и для каждого шаблона класса/функции мы сможем установить ограничения constraints для его типов. Однако в документациях и учебных руководствах (например, здесь) я не смог найти правильный синтаксис для варианта использования нескольких типов.
Предположим, у нас есть концепция нескольких типов:
template<typename T1, typename T2>
concept AreEqComparable = requires(T1 a, T2 b) {
{ a == b } -> bool;
};
Допустим, я хочу определить простую функцию сравнения между двумя разными типами. Как я могу это сделать? Более конкретно, что я должен написать в ???
части кода ниже:
???
bool are_equal(T1 a, T2 b) { return a == b; }
Я не смог найти никакой ссылки на этот случай в здесь, здесь и даже здесь. Я случайно попробовал что-то вроде:
/* 1 */ template<AreEqComparable T1, T2>
/* 2 */ AreEqComparable<T1, T2>
/* 3 */ template<AreEqComparable<T1, T2>>
Но все они выдают синтаксические ошибки. Я думаю, что ответ должен лежать где-то в спецификации P0557 Бьярно Страуструпа, но я не смог найти его после быстрого взгляда.