我有一段代码,在VS2008成功地编译和失败,在VS2013编译。
有一类Data::CData
是一个变体类型的实现。 它有一个转换操作符重载:
template<class T> T& GetValue();
template<class T> const T& GetValue() const;
template<class T> operator T&() { return GetValue<T>(); }
template<class T> operator const T&() const { return GetValue<T>(); }
产生一个错误的代码是
Data::CData Val;
Data::PParams Prm = (const Data::PParams&)Val;
错误是:错误C2678:二进制“=”:没有操作员发现这需要类型的左边的操作数“const的数据:: PParams”(或没有可接受的转化率)。
而这种代码是成功的双方编译器编译:
Data::CData Val;
Data::PParams Prm = Val.operator const Data::PParams&();
我该怎么办错了吗?
例如,其再现一个问题: https://www.dropbox.com/s/zjohnu5v87tyr2c/ConstOverload.zip?dl=0