#include <iostream>
constexpr bool t()
{
struct A {};
struct B {};
union U { A a; B b; } u{};
u.a = A{};
u.b = B{};
return true;
}
static_assert(t(), "oops");
constexpr bool f()
{
struct A { char c; };
struct B { char c; };
union U { A a; B b; } u{};
u.a = A{};
u.b = B{}; // error originating from here
return true;
}
static_assert(f(), "whoa dude");
int main () { std::cout << "It worked"; }
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY29uc3RleHByIGJvb2wgdCgpCnsKICAgIHN0cnVjdCBBIHt9OwogICAgc3RydWN0IEIge307CiAgICB1bmlvbiBVIHsgQSBhOyBCIGI7IH0gdXt9OwogICAgdS5hID0gQXt9OwogICAgdS5iID0gQnt9OwogICAgcmV0dXJuIHRydWU7Cn0Kc3RhdGljX2Fzc2VydCh0KCksICJvb3BzIik7Cgpjb25zdGV4cHIgYm9vbCBmKCkKewogICAgc3RydWN0IEEgeyBjaGFyIGM7IH07CiAgICBzdHJ1Y3QgQiB7IGNoYXIgYzsgfTsKICAgIHVuaW9uIFUgeyBBIGE7IEIgYjsgfSB1e307CiAgICB1LmEgPSBBe307CiAgICB1LmIgPSBCe307IC8vIGVycm9yIG9yaWdpbmF0aW5nIGZyb20gaGVyZQogICAgcmV0dXJuIHRydWU7Cn0Kc3RhdGljX2Fzc2VydChmKCksICJ3aG9hIGR1ZGUiKTsKCmludCBtYWluICgpIHsgc3RkOjpjb3V0IDw8ICJJdCB3b3JrZWQiOyAgfQ==