Visual C++(VS2017)中用户定义的转换不明确
Ambiguous user-defined-conversion in Visual C++ (VS2017)
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;
}
错误:
- 错误C2440:"initializing":无法从"D"转换为"int">
- 注意:用户定义的转换不明确
g++7.3(默认情况下,std=c++11/14/17(和VS2013(更新5(编译它时没有任何与转换函数相关的警告/错误(即使有-Wall(。
为什么代码不明确?这是一个VC++错误吗?
这看起来像是一个编译器错误。我在这里报告了:在虚拟继承中找不到用户定义的转换
请随意投票,这样它就可以优先修复
相关文章:
- 仅为某些模板专用化定义转换运算符:预期类型/预期类型说明符
- 模拟返回具有多个用户定义转换的类型的方法
- 是否可以使用明确的模板参数调用模板的用户定义转换操作员
- 使用自定义转换运算符的不明确性
- C++显式积分用户定义转换
- 解决隐藏歧义的不明确用户定义转换
- 如何自定义转换模板参数
- 用户定义转换的第二个标准转换序列
- 如何将串联的定义转换为RC文件中的字符串
- 是否可以用C++编写自定义转换运算符(如“static_cast”)
- Qt4:QGraphicsScene/View和自定义转换方法
- 如何将c结构体定义转换为c++
- 如何在VS2008中将#define定义转换为字符串
- 为什么模板化的用户定义转换操作符能够确定其返回类型?
- #定义转换为LPCSTR或std::string的字符串
- 错误无效的用户定义转换
- 无效的用户定义转换错误
- 是否有方法为任何指针类型定义转换操作符
- Visual C++ 不存在从"myClass1"到"myClass1"的合适用户定义转换
- 提振.Python自定义转换器