Consider
template<typename T>
struct Foo
{
Foo(const Foo&) = delete;
template <typename Y>
Foo(const Foo<Y>&){}
};
模板构造函数的适当实例化是否代表复制构造函数?我知道通常不会(因为复制构造函数不能是模板函数),但在这里我删除了复制构造函数。
这里的问题是删除的函数仍然参与重载决策。所以给出
Foo<int> a;
Foo<int> b{a};
可行的函数是删除的复制构造函数和带有推导模板参数的模板构造函数int
。作为非模板,删除的复制构造函数获胜。并且使用删除的函数会使程序格式错误。
因此,模板构造函数永远不能实例化为用于复制相同类型对象的复制构造函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)