有没有一种方法可以constexpr检查一个类是否有任何可访问的构造函数

Is there a way to constexpr check if a class has any accessible constructor at all?

本文关键字:是否 任何可 构造函数 一个 访问 constexpr 方法 一种 检查 有没有      更新时间:2024-09-27

std::is_constructible及其变体(用于复制、移动和默认构造函数(。

然而,有没有一种方法可以进行constexpr检查,检查对象是否可以被构造?

有没有一种方法可以进行constexpr检查,检查对象是否可以构造?

您可以编写一个constexpr函数,然后添加不同的检查(is_default_constructible等(,如下所示:

class C 
{
public:
C() = default;
};
class C2
{
public:
C2() {}
private:
C2(const C2&){}
};
template<typename T>
constexpr bool checkAccessibleCtor()
{
//write checks here according to your need
return std::is_default_constructible<T>::value && 
std::is_copy_constructible<T>::value && 
std::is_move_constructible<T>::value;
}
int main()
{
std::cout << checkAccessibleCtor<C>()<<std::endl;   //print 1
std::cout << checkAccessibleCtor<C2>()<<std::endl; //prints 0
}