このプログラムを考えてみましょう:
#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のバグですか、これがgcc / clangからの正しい動作であるという標準を解釈することは可能ですか?