Date: Fri, 21 Oct 2022 15:21:58 +0200
On 21.10.22 15:00, Lénárd Szolnoki via Std-Discussion wrote:
> Hi,
>
> It's explicitly not allowed in constexpr:
Yes. But I wonder if there the exception of structs with common initials
sequence ist just "forgotten"?
If this exception
https://timsong-cpp.github.io/cppwp/class.union#general-2
is given, why should that not hold in a constexpr context?
> Hi,
>
> It's explicitly not allowed in constexpr:
Yes. But I wonder if there the exception of structs with common initials
sequence ist just "forgotten"?
If this exception
https://timsong-cpp.github.io/cppwp/class.union#general-2
is given, why should that not hold in a constexpr context?
-- Wilhelm > > https://timsong-cpp.github.io/cppwp/n4868/expr.const#5.9 > <https://timsong-cpp.github.io/cppwp/n4868/expr.const#5.9> > > Cheers, > Lénárd > > > On 21 October 2022 12:36:57 BST, Wilhelm Meier via Std-Discussion > <std-discussion_at_[hidden]> wrote: > > HI all, > > the standard explicitly makes this exception: accessing an inactive union member is not UB if the members are structs with initial common sequence. > > Is this also true in a constexpr context? I ask this because the chapter for constexpr expression does not mention this exception accessing an inactive memeber. > > Here is some test-code: > > struct A { > char e0; > }; > struct B { > char e0; > }; > > template<typename A, typename B> > union U { > A a; > B b; > }; > > int main() { > constexpr U<A, B> u{.a = {1}}; // sets member a active > constexpr char t1 = u.b.e0; // should be ok, because read via a struct with common initial sequence, but also in a constexpr context? > } > -- > Wilhelm > >
Received on 2022-10-21 13:22:01