考虑以下程序:
#include <cstdint>
using my_time_t = uintptr_t;
int main() {
const my_time_t t = my_time_t(nullptr);
}
无法使用msvc v19.24进行编译:
<source>(5): error C2440: '<function-style-cast>': cannot convert from 'nullptr' to 'my_time_t'
<source>(5): note: A native nullptr can only be converted to bool or, using reinterpret_cast, to an integral type
<source>(5): error C2789: 't': an object of const-qualified type must be initialized
<source>(5): note: see declaration of 't'
Compiler returned: 2
但是clang(9.0.1)和gcc(9.2.1)可以“吃掉”这段代码,而不会出现任何错误。
我喜欢MSVC行为,但是是否已通过标准确认?换句话说,这是clang / gcc中的bug还是可以从gcc / clang中解释这是正确的行为的标准?