Один из углов концепций С++ 20 заключается в том, что существуют определенные ситуации, в которых вам нужно написать " requires requires
. Например, этот пример из [expr.prim.req]/3:
Выражение require также может использоваться в предложении require ([temp]) как способ написания специальных ограничений для аргументов шаблона, таких как приведенный ниже:
template<typename T> requires requires (T x) { x + x; } T add(T a, T b) { return a + b; }
Первый требует вводит предложение require, а второй вводит выражение require.
Какова техническая причина, по которой нужно второе ключевое слово requires
? Почему мы не можем просто разрешить писать:
template<typename T>
requires (T x) { x + x; }
T add(T a, T b) { return a + b; }
(Примечание: пожалуйста, не отвечайте, что грамматика requires
этого)