假设我有一个基类
class Base {};
std::is_trivial<Base>::value
是true
。有没有办法强制从Base
派生的所有类也是微不足道的?
换句话说,如何修改Base
以便导致编译错误?
class Derived : public Base {
Derived() {}
};
答案 0 :(得分:0)
不要写一个构造函数:
#include <iostream>
#include <type_traits>
#include <cassert>
struct A {
int m;
};
struct B : A{
B() {}
};
struct C : A{
C() = default;
};
int main()
{
assert( std::is_trivial<A>{});
assert(!std::is_trivial<B>{});
assert( std::is_trivial<C>{});
}
执行&#34;强制执行&#34;部分比较棘手,你可以设置一个约束,但使用CRTP。
#include <iostream>
#include <type_traits>
#include <cassert>
template<class D>
struct A {
int m;
static void enforce(){static_assert(std::is_trivial<D>{},"");}
};
/*struct B : A<B>{
B() {}
};*/
struct C : A<C>{
C() = default;
};
int main()
{
// assert( std::is_trivial<A>{});
// assert(!std::is_trivial<B>{});
assert( std::is_trivial<C>{});
}