Я написал следующую концепцию, сохраняя Первый параметр шаблона отделен от других параметров шаблона, потому что мне нужно было сравнить его с всеми остальными: < /p>
Код: Выделить всё
template
concept all_same_v1 = (... && std::same_as);
< /code>
Однако при использовании приведенной выше концепции приведенный ниже код не компилируется на GCC и Clang, а компилируется на MSVC (ссылка Godbolt): < /p>
template requires all_same_v1
void f(Ts&&... ts);
< /code>
Ошибка на GCC: < /p>
:6:36: error: pack expansion argument for non-pack parameter 'T1' of concept 'template concept all_same_v1'
6 | template requires all_same_v1
| ^~~~~~~~~~~~~~~~~~
:3:11: note: declared here
3 | template
| ^~~~~~~~
< /code>
Напротив, выполнение следующей реализации O (n²) работает: < /p>
template
concept same_with_others = (... && std::same_as);
template
concept all_same_v2 = (... && same_with_others);
template requires all_same_v2
void f(Ts&&... ts);
Подробнее здесь: https://stackoverflow.com/questions/791 ... meter-pack