【发布时间】:2019-02-12 20:19:24
【问题描述】:
编译这段代码时:
enum B: bool { T = true };
struct A { bool member; };
void foo(const B b = T)
{
A a{b}; // warning here
}
void bar()
{
const B b = T;
A a{b};
}
MSVC 在foo 中发出警告:
警告 C4838:从“const B”到“bool”的转换需要缩小转换
但编译 bar 很好。
这是proof
这是编译器错误还是预期行为?
【问题讨论】:
-
我的猜测是您遇到了list initialization 问题,它正在执行整数提升。根据我对 CPPReference 的阅读,这不是 UB 并且是允许的,但 MS 让您知道它在技术上是一种缩小转换。
-
是否修复了将
enum B更改为enum class B的警告?
标签: c++ visual-c++