[Bug c++/97665] constexpr union array member incorrectly rejected as non-constexpr
ldalessandro at gmail dot com
gcc-bugzilla@gcc.gnu.org
Mon Nov 2 17:37:24 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97665
--- Comment #5 from Luke Dalessandro <ldalessandro at gmail dot com> ---
Ugh... replying to myself.
> You can do Foo foo = Foo(); and it compiles.
>> 1. I can't do `Foo foo = Foo();` because the purpose of the union is to allocate uninitialized storage for the `Foo` during `constexpr` execution when `Foo` has no default constructor. I realize now I meant to write `constexpr Foo() = delete;`.
This means to say "trivial default constructor," not just "default
constructor". The empty default constructor was an adequate test case for this,
but is misleading. The `= delete` should be more effective as an example.
The context for the use is to create an array that provides uninitialized
vector storage during `constexpr` evaluation in the same way a
`std::byte[T*sizeof(T)]` array combined with `reinterptret_cast<T*>` might be
used during normal execution.
More information about the Gcc-bugs
mailing list