Is placement new on a const variable with automatic storage duration legal?

Viewed 98

Is the following code legal according to the standard?

#include <new>
int main() {
    const int x = 3;
    new ((void *)&x) int { 15 };
}

It seems to me that as long as there is no use of a reference to x it should be valid.

As per the c++ standard basic.life 8:

a pointer that pointed to the original object, a reference that referred to the original object [...]

  • the type of the original object is not const-qualified, and, if a class type, does not contain any non-static data member whose type is const-qualified or a reference type

PS : if the answer could contain a reference to the standard it would be much appreciated

1 Answers

Is the following code legal according to the standard?

The behaviour of the program is undefined:

[basic.life]

Creating a new object within the storage that a const complete object with static, thread, or automatic storage duration occupies, or within the storage that such a const object used to occupy before its lifetime ended, results in undefined behavior.

Related