https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97195

David Stone <david at doublewise dot net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |david at doublewise dot net

--- Comment #1 from David Stone <david at doublewise dot net> ---
This is actually a broader bug in construct_at, unrelated to unions:


```
#include <memory>

constexpr bool test() {
        int a = 5;
        std::construct_at(
                &a,
                -1
        );
        return true;
}
constexpr bool b = test();
```

is also rejected. See it live: https://godbolt.org/z/KWK8n1

The real problem here appears to be that std::construct_at is not a constant
expression for values with non-constant addresses. The following code, for
example, is accepted:

```
#include <memory>

struct S {
        constexpr S() {
                std::construct_at(
                        &m,
                        -1
                );
        }

        int m;
};

constexpr S s;
```

See it live: https://godbolt.org/z/Wdx9Kx

Reply via email to