如何在不使用type_traits的情况下检查复制构造函数是否为noexcept?

rub*_*ict 2 c++ type-traits

经过一些实验后,我设法编写了一段代码来检查类的移动构造函数是否为noexcept(不使用type_traits;这只是一个练习):

std::cout << std::boolalpha << noexcept(Widget(std::declval<Widget>())) << std::endl;
Run Code Online (Sandbox Code Playgroud)

declval函数"返回"Widget &&,因此整个表达式是一个移动构造函数调用.但是如何为复制构造函数实现类似的东西呢?

0x4*_*2D2 7

使用std::declval<Widget&>().参考折叠将T&& &变为T&:

std::cout << std::boolalpha << noexcept(Widget(std::declval<Widget&>())) << std::endl;
//                                                          ^^^^^^^^
Run Code Online (Sandbox Code Playgroud)