28 October 2023

C++ 核心指南目录

“Check that a class matches a concept using static_assert”

理由

如果你想要某个类符合某个概念,尽量在早期进行验证,可以减少用户的痛苦。

例子

class X {
public:
    X() = delete;
    X(const X&) = default;
    X(X&&) = default;
    X& operator=(const X&) = default;
    // ...
};

可以在实现文件的某处,让编译器去检查我们需要的 X 的属性:

// error: X has no default constructor
static_assert(Default_constructible<X>);
// error: we forgot to define X's move constructor
static_assert(Copyable<X>);