Visual C++(VS2017)中用户定义的转换不明确

Ambiguous user-defined-conversion in Visual C++ (VS2017)

本文关键字:定义 转换 不明确 用户 C++ VS2017 Visual      更新时间:2023-10-16

VS2017(15.8.7/15.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;
}

错误:

  1. 错误C2440:"initializing":无法从"D"转换为"int">
  2. 注意:用户定义的转换不明确

g++7.3(默认情况下,std=c++11/14/17(和VS2013(更新5(编译它时没有任何与转换函数相关的警告/错误(即使有-Wall(。

为什么代码不明确?这是一个VC++错误吗?

这看起来像是一个编译器错误。我在这里报告了:在虚拟继承中找不到用户定义的转换

请随意投票,这样它就可以优先修复