https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94510
Bug ID: 94510 Summary: nullptr_t implicitly cast to zero twice in std::array Product: gcc Version: 9.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: kndevl at outlook dot com Target Milestone: --- `std::array<int, 3> arr{ nullptr, 0, 0 };` is expected to fail to compile similar to how `std::array<int, 3> arr{ nullptr, 0, 1 };` fails. What I infer is that if all elements are effectively zero, type conversions are not checked. This makes sense if a variable of static storage duration is initialized to zero and std::array constructor can ignore the arguments in the initializer if all arguments are implicitly zero. Is there anything on the C++ standard that allows this optimization I am missing here? # This works fine, as expected `g++ -save-temps -c not-bug.cpp` > not-bug.cpp: In function ‘void test()’: > not-bug.cpp:4:43: error: cannot convert ‘std::nullptr_t’ to ‘int’ in > initialization > 4 | std::array<int, 3> arr{ nullptr, 0, 1 }; # This compiles fine, but this should error out `g++ -save-temps -c bug.cpp` I built the tip of gcc yesterday. It had the same bug. Any pointers on how I can go about debugging this? - Does type checking happen during GENERIC stage? - How do I print the source string corresponding to a TREE struct?