typ*_*232 5 c++ templates switch-statement implicit-conversion
以下代码崩溃Microsoft编译器:
class Var
{
public:
template <typename T>
operator T () const
{ }
};
int main()
{
Var v;
switch (v)
{ }
}
Run Code Online (Sandbox Code Playgroud)
我的问题:代码是否正确或编译器是否应该给出适当的错误?是否可以明确地转换为整数类型?
编译器崩溃总是一个错误,这个代码不会编译gcc或者clang两者都提供错误而不会崩溃.对于clang错误是:
error: statement requires expression of integer type ('Var' invalid)
switch (v)
^ ~
Run Code Online (Sandbox Code Playgroud)
gcc 提供以下错误:
error: ambiguous default type conversion from 'Var'
switch (v)
^
Run Code Online (Sandbox Code Playgroud)
另请注意,在值返回函数的末尾流出的是C++中未定义的行为.
更新
添加:
operator int () const
{ return 0; }
Run Code Online (Sandbox Code Playgroud)
到班级带来不同的结果clang和gcc.
见在switch语句的条件既模板和非模板转换运算符类的讨论是否gcc还是clang正确.我对N3323暗示铿锵的解释在这一点上是正确的.
提交错误报告
我为此ICE提交了一份错误报告,到目前为止还没有回复.即使这看起来像一个奇怪的角落情况,它确实会导致内部编译器错误,应该修复.
| 归档时间: |
|
| 查看次数: |
227 次 |
| 最近记录: |