#include <iostream>
using namespace std;
class A
{
public:
A() { }
//virtual ~A() = 0;
private:
int a;
};
int main()
{
cout << boolalpha;
//Class 不带任何成员 virtual成员函数或virtual base class
cout << is_empty<A>::value << endl;
//Class 带有一个(derived)virtual成员函数
cout << is_polymorphic<A>::value << endl;
//抽象类(至少含有一个纯虚函数)
cout << is_abstract<A>::value << endl;
//Class 含有虚析构函数
cout << has_virtual_destructor<A>::value << endl;
//Class 能否使用默认构造函数(抽象类必为false)
cout << is_default_constructible<A>::value << endl;
//Class 能否使用复制构造函数(抽象类必为false)
cout << is_copy_constructible<A>::value << endl;
//Class 能否使用移动构造函数(抽象类必为false)
cout << is_move_constructible<A>::value << endl;
//Class 能否使用复制赋值函数
cout << is_copy_assignable<A>::value << endl;
//Class 能否使用移动赋值函数
cout << is_move_assignable<A>::value << endl;
//Class 能否合成默认构造函数
cout << is_trivially_default_constructible<A>::value << endl;
//Class 能否合成复制构造函数
cout << is_trivially_copy_constructible<A>::value << endl;
//Class 能否合成移动构造函数
cout << is_trivially_move_constructible<A>::value << endl;
//Class 能否合成复制赋值构造函数
cout << is_trivially_copy_assignable<A>::value << endl;
//Class 能否合成移动赋值构造函数
cout << is_trivially_move_assignable<A>::value << endl;
//Class 能否使用默认构造函数且不抛出异常
cout << is_nothrow_default_constructible<A>::value << endl;
//Class 能否使用复制构造函数且不抛出异常
cout << is_nothrow_copy_constructible<A>::value << endl;
//Class 能否使用移动构造函数且不抛出异常
cout << is_nothrow_move_constructible<A>::value << endl;
//Class 能否使用复制赋值函数且不抛出异常
cout << is_nothrow_copy_assignable<A>::value << endl;
//Class 能否使用移动赋值函数且不抛出异常
cout << is_nothrow_move_assignable<A>::value << endl;
//Class 能否使用析构函数且不抛出异常
cout << is_nothrow_destructible<A>::value << endl;
system("pause");
return 0;
}
c++ type trait 之 class trait
最新推荐文章于 2024-03-22 15:10:46 发布