识别自动生成的成员函数

时间:2014-09-13 08:52:00

标签: c++ gcc clang

特殊成员函数是“如果使用它们,编译器将自动生成但未由程序员明确声明的函数”。

http://en.wikipedia.org/wiki/Special_member_functions

详细信息在C ++ 11标准的第12节中:

  

默认构造函数(12.1),复制构造函数和复制赋值运算符(12.8),移动构造函数和移动赋值运算符(12.8)以及析构函数(12.4)是特殊成员函数。 [注意:当程序没有明确声明它们时,实现将隐式声明某些类类型的这些成员函数。如果它们使用得很多,那么实现将隐式定义它们(3.2)。见12.1,12.4和12.8。 - 结束记录]

哪些已知方法可以在编译时识别所有生成的特殊成员函数?

我首选的编译器是gcc和clang。

1 个答案:

答案 0 :(得分:1)

在c ++ 11中,标题<type_traits>定义了一组以下函数:

is_constructible
is_default_contructible
is_copy_contructible
is_move_contructible
is_assignable
is_copy_assignable
is_move_assignable
is_destructible

您可以使用它们在编译时测试隐式生成的方法是否存在, 例如:

std::is_constructible<ClassName>::value