【发布时间】:2018-10-31 11:10:03
【问题描述】:
VS2017 (15.8.7/15.8.8) 编译代码失败如下:
#include <iostream>
class A
{
public:
operator int() const { std::cout << "int() 1" << std::endl; return 0; }
operator int() { std::cout << "int() 2" << std::endl; return 0; }
};
class B : virtual public A {};
class C : virtual public A {};
class D : public B, public C {};
int main()
{
// Compiles when const version is defined before non-const.
// The assignment calls const version of course.
const D cobj;
int i = cobj;
// Compiles when non-const version is defined before const.
// The assignment calls non-const version.
D obj;
int j = obj;
return 0;
}
错误:
- 错误 C2440:“正在初始化”:无法从“D”转换为“int”
- 注意:用户定义的转换不明确
g++ 7.3(默认情况下,std=c++11/14/17)和 VS2013(更新 5) 编译这个没有任何与转换函数相关的警告/错误 (即使使用 -Wall)。
为什么代码不明确?这是 VC++ 的错误吗?
【问题讨论】:
-
你应该提交一份错误报告。
-
确实像一个错误。
-
FWIW、icc 18 和 19 也都无法在 Godbolt 上编译
标签: c++ visual-c++ visual-studio-2017