【发布时间】:2021-08-05 14:27:21
【问题描述】:
在下面的代码中
struct S {
operator auto() { return 42; }
};
operator auto 等价于operator int,因为实际类型将从文字42 推导出来,并且该类型是int。如果我写42.5 而不是42,那么operator auto 将被解释为operator double,原因很明显。但是当我同时使用这两种编译器时,我得到了所有三个主要编译器(gcc、clang、msvc)的编译器错误:
struct S {
operator auto() { return 42; }
operator auto() { return 42.5; }
};
实际错误信息因编译器而异,但原因相同:“函数已定义”。
我无法在标准中找到为什么不能在一个类中同时使用 operator auto(具有不同的返回类型)。有人能指出标准的条款,其中该组转换功能被视为被禁止吗?
【问题讨论】:
-
您可以使用模板和模板专业化绕过问题和错误。
-
一些奇怪的事情正在发生 - 现场 - godbolt.org/z/3cvMxacoG
标签: c++ type-conversion language-lawyer auto