Xeo*_*Xeo 4 c++ templates member static-assert c++11
考虑这个简单的类:
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;
};
Run Code Online (Sandbox Code Playgroud)
它允许从模板类型隐式构造和隐式转换回该类型,一个简单的包装器.
现在,我不想在不相关的Foos 之间启用转换,这可能是因为这些隐式构造/转换.我可以将模板化的copy-ctor设为私有,但我不想发出有用的诊断信息static_assert.
这个问题,如Ideone所示,static_assert即使我甚至没有尝试复制类型,也会出现问题!在Visual Studio中,我得到了我想要的行为,但我认为这是由于VS解析模板的方式.有没有办法让这个工作?
它编译失败,因为编译器可以清楚地看到static_assert无论如何都会失败.它不依赖于U与T以任何方式.
我想你想要这样的东西:
static_assert(std::is_same<T,U>::value,"Cannot convert from Foo<U> to Foo<T>.");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1035 次 |
| 最近记录: |