<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/107593>107593</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Unexpected error: (constexpr) placement new would change type of storage
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
pkeir
</td>
</tr>
</table>
<pre>
The C++26 code below fails to compile:
```cpp
#include <memory>
constexpr bool test()
{
int* p = std::allocator<int>{}.allocate(3);
new (p) int[]{1, 2, 3};
std::allocator<int>{}.deallocate(p, 3);
return true;
}
static_assert(test());
```
The code is using [P2747](https://wg21.link/P2747) constexpr placement new, as a test; from a code excerpt in the proposal. The code compiles on GCC. A Compiler Explorer example without the `<memory>` dependency is available [here](https://godbolt.org/z/Mna6TaPx1). The invocation and error message is:
```
clang++ -c -stdlib=libc++ -std=c++26 cpn-test.cpp
cpn-test.cpp:11:15: error: static assertion expression is not an integral constant expression
11 | static_assert(test());
| ^~~~~~
cpn-test.cpp:6:3: note: placement new would change type of storage from 'int' to 'int[3]'
6 | new (p) int[]{1, 2, 3};
| ^
cpn-test.cpp:11:15: note: in call to 'test()'
11 | static_assert(test());
| ^~~~~~
1 error generated.
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVU2P4zYM_TXMhZjApmI7PviQj0lPBfawPReyzXHUVSRBkieZHvrbC9meSWaxwG5RIVBkmSIfHx9lGYIaDHMDxR6K40qO8Wx9476x8qvW9m_N1zPjAWgPtKcSO9sztqztFV-k0gGjxc5enNIMYoeQHSHbLXOZzb_OuWWHhDKdHntGEIcLX6x_A_H8eKizJkS-OY-ttRojhwi0BaoXo2o_L1CZCLRDhyCOGGIPYgdiJ7W2nYzWgzgkC_GcTlTH9fKCgbYieRPvftDwFYG2DqienE48QLXPgQ5IaRJQHe8Hfh6r54dobvbwKaTnOHqD0Y_8sZtiTIsQZVTdnzIE9in3BwoenHyQ-0heKtVUIBVwDMoMCMX-C1WbKqVE23OMLiTwdAI6XQfK11qZb0Cn2YhqvPPvtOz4wiYmhlISMqCcCyL2-OLtBeUcjW8dexdRGYxnRuets0HqNX7gWRQS0Br87XBY4w4P85bH55vT1rNHvsmL04xXFc92jJOvlOCjUsoMe3ZsejbdW0pTvkqlZas5pXpmzz_KdLB9a3VcWz8Anf4GOv1uZPlVfrnlQPWMU5nXVDJlDUrTI3tvPV44BDkkPpOvH2l7Ua2WZph7BJ86fAqx16oFcdSq7d73J-Ecu3srOfOU6Fx3zi2N87gFYpfnaSpSY0140mKWB87ySGhTsTiEtFQBjY0oTRIyD17quZ7SxAezdxViniNUB_w1weE0kj0Uz_-k8UPIJYidSDiNjdON8ElGeLWj7rE7SzMwxjfHaF8wROsTy5OmgKqptat0sywPxV5MZa3uUMoJyn_v3scsfsb5ewrKYCe1XgA90lP9Xy4_j8_M5osIBzbsZeR-_Z32Vn0j-lrUcsVNXlFRCqo35erc1AUVPYuyq0ouS1H1Gb20JKjY1izLTblSDWW0yeqszDdUZ2KdFSzLl6yWRSm5ywVsMr5Ipddav15S36xUCCM3eVYVtVhp2bIO0zeDKJVgegtE6RPim3ToqR2HAJtMqxDD3U1UUXPzh-Gb4y5yfxc20Pbj8knV_HXhrEavm-86XsXz2K47ewE6peDL35Pz9i_uItBpghyATktOrw39GwAA__91Mhdb">