Предпочитайте сокращённую запись для простых концептов с одним типовым аргументом
Причина
Читаемость. Прямое выражение идеи.
Пример
Чтобы сказать «T является sortable»:
template<typename T> // Правильно, но многословно: "Параметр имеет тип T,
requires sortable<T> // который является именем типа,
void sort(T&); // который является sortable"
template<sortable T> // Лучше: "Параметр имеет тип T,
void sort(T&); // который является Sortable"
void sort(sortable auto&); // Лучше всего: "Параметр является Sortable"
Короткие варианты лучше соответствуют тому, как мы говорим. Обратите внимание, что многим шаблонам не нужно использовать ключевое слово template.
Контроль
- В краткосрочной перспективе нецелесообразно, когда люди переходят с записи
<typename T>и<class T>. - В дальнейшем помечать объявления, которые сначала вводят typename, а затем ограничивают его простым концептом с одним типовым аргументом.
T.concepts.def: Правила определения концептов
Определение хороших концептов — нетривиальная задача. Концепты призваны представлять фундаментальные понятия в прикладной области (отсюда и название «концепты»). Простое объединение набора синтаксических ограничений для использования в аргументах одного класса или алгоритма — это не то, для чего предназначены концепты, и это не даст всех преимуществ данного механизма.
Очевидно, определение концептов наиболее полезно для кода, который может использовать их реализацию (например, C++20 и выше), но само по себе определение концептов является полезной техникой проектирования и помогает обнаруживать концептуальные ошибки и прояснять концепции (самого понятия) реализации.