【发布时间】:2017-12-07 22:48:00
【问题描述】:
假设这是我的班级:
#include<utility>
#include<type_traits>
template<typename T>
class MyClass {
T v;
public:
template<typename...Ts>
MyClass(Ts&&...args) :v{ std::forward<Ts>(args)... } {}
MyClass(MyClass const&) = default;
MyClass(MyClass &&) = default;
};
class OtherClass {
public:
operator MyClass<int>() {
return{};
}
};
int main(){
MyClass<int> mc;
MyClass<int> mc2{ mc }; // error: cannot convert from 'MyClass<int>' to 'int'
OtherClass oc;
MyClass<int> mc3 {oc}; // error: cannot convert from 'OtherClass' to 'int'
}
如何正确防止可变参数模板构造函数实例化复制/移动构造函数?
【问题讨论】:
-
See this thread - 您可以使用 SFINAE 或虚拟参数从转发构造函数中“删除”复制构造案例
标签: c++ c++11 templates template-meta-programming