【问题标题】:Ambiguous user-defined-conversion in Visual C++ (VS2017)Visual C++ (VS2017) 中的模糊用户定义转换
【发布时间】: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;
}

错误:

  1. 错误 C2440:“正在初始化”:无法从“D”转换为“int”
  2. 注意:用户定义的转换不明确

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

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

【问题讨论】:

  • 你应该提交一份错误报告。
  • 确实像一个错误。
  • FWIW、icc 18 和 19 也都无法在 Godbolt 上编译

标签: c++ visual-c++ visual-studio-2017


【解决方案1】:

这似乎是一个编译器错误。我在这里举报了:fails to find user-defined-conversion in virtual inheritance

请随意投票,以便优先修复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    相关资源
    最近更新 更多