考虑这个简单的类:
template<class T>
class Foo{
public:
Foo(T const& val)
: _val(val) {}
template<class U>
Foo(Foo<U> const&){
static_assert(false,"Cannot convert from Foo<U> to Foo<T>.");
}
operator T&() { return _val; }
operator T const&() const{ return _val; }
private:
T _val;
};
它允许从模板类型隐式构造和隐式转换回该类型,一个简单的包装器。
现在,我不想启用不相关Foo
的 s 之间的转换,因为这些隐式构造/转换是可能的。我可以将模板化的 copy-ctor 设为私有,但我不想通过static_assert
.
问题,如Ideone 上所示,static_assert
即使我什至没有尝试复制类型,也会失败!在 Visual Studio 中,我得到了我想要的行为,尽管我认为这是由于 VS 解析模板的方式。有什么办法可以让这个工作吗?