|
|
От: |
wl.
|
|
| Дата: | 23.06.25 17:44 | ||
| Оценка: | |||
Концепт SemiRegular
Тип X является semiregular, если он поддерживает большую шестерку функций
(Big Six) и операцию swap. Большая шестерка состоит из следующих функций:
конструктор по умолчанию X();
конструктор копирования X ( const X& );
оператор присваивания X& operator ( const X& );
конструктор перемещения X ( X&& );
оператор перемещения X& operator = ( X&& );
деструктор ~X().
Дополнительно к этому должна быть определена операция swap(X&, X&).
Благодаря библиотеке свойств типов1
определить соответствующий концепт легко. Для начала я определю свойство типа isSemiRegular и затем использую его для определения концепта SemiRegular.
1 template<typename T>
2 struct isSemiRegular: std::integral_constant<bool,
3 std::is_default_constructible<T>::value &&
4 std::is_copy_constructible<T>::value &&
5 std::is_copy_assignable<T>::value &&
6 std::is_move_constructible<T>::value &&
7 std::is_move_assignable<T>::value &&
8 std::is_destructible<T>::value &&
9 std::is_swappable<T>::value >{};
10
11
12 template<typename T>
13 concept SemiRegular = isSemiRegular<T>::value;