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.