【发布时间】:2022-01-31 02:45:01
【问题描述】:
我有以下课程:
template <typename T=void>
class Foo{
public:
Foo(){};
template <typename = typename std::enable_if_t<!std::is_void<T>::value, std::nullptr_t>>
Foo(const T&){};
};
int main() {
Foo<void> v;
}
v 是使用第一个构造函数创建的。因此,无需为Foo<void> 创建第二个构造函数。
为什么还是要创建它?
问题是显式创建类型为void 的第二个构造函数会绕过SFINAE,并尝试创建const void& 的参数。这显然是不允许的。
如果T 是void,如何防止第二个构造函数有效?
【问题讨论】:
标签: c++ templates void sfinae enable-if