https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96557
Bug ID: 96557 Summary: Diagnostics: Can you tell me why it's not a constant expression? Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: barry.revzin at gmail dot com Target Milestone: --- Consider: struct X { char storage[100] = {}; char const* head = storage; }; void f() { constexpr X x = {}; } gcc correctly rejects this with: error: 'X{"", ((const char*)(& x.X::storage))}' is not a constant expression 7 | constexpr X x = {}; | ^ It'd be great if the error here actually indicated _why_ it's not a constant expression (or how to fix it). clang does a little bit better: <source>:7:17: error: constexpr variable 'x' must be initialized by a constant expression constexpr X x = {}; ^ ~~ <source>:7:17: note: pointer to subobject of 'x' is not a constant expression <source>:7:17: note: declared here But ideally we get some message about specifically 'head' pointing to 'storage' and a fixup suggesting making the variable x static.