CppCoreGuidelines T.46 要求模板参数至少是半正则的
13 September 2023
“Require template arguments to be at least semiregular”
理由
可读性。避免出现惊讶和错误。很多应用场合支持这个规则。
例子
class X { public: explicit X(int); X(const X&); // copy X operator=(const X&); X(X&&) noexcept; // move X& operator=(X&&) noexcept; ~X(); // ... no more constructors ... }; X x {1}; // fine X y = x; // fine std::vector<X> v(10); // error: no default constructor
注意
半正则需要默认可构造。
强化
- 标注模板参数不是半正则的情况。