Templates and generic programming
T.150
Проверяйте соответствие класса концепту с помощью `static_assert`
Причина
Если вы намерены, чтобы класс соответствовал концепту, раннее подтверждение этого избавит пользователей от боли.
Пример
class X {
public:
X() = delete;
X(const X&) = default;
X(X&&) = default;
X& operator=(const X&) = default;
// ...
};
Где-нибудь, возможно в файле реализации, позвольте компилятору проверить желаемые свойства X:
static_assert(Default_constructible<X>); // error: X has no default constructor
static_assert(Copyable<X>); // error: we forgot to define X's move constructor
Контроль
Неосуществимо.