| // PR c++/65816 |
| // { dg-do run { target c++11 } } |
| |
| void* operator new(decltype(sizeof(int)), void* ptr) { return ptr; } |
| |
| struct item { int i; }; |
| |
| struct collector : item { |
| int j; |
| collector() = default; |
| collector(int) {} |
| }; |
| |
| struct tuple : collector { |
| tuple() : collector() {} |
| }; |
| |
| int main() { |
| alignas(tuple) unsigned char space[sizeof(tuple)]; |
| for (auto& c : space) c = 0xff; |
| |
| auto ptr = ::new(&space) tuple; |
| int& i = static_cast<tuple&>(*ptr).i; |
| int& j = static_cast<tuple&>(*ptr).j; |
| if (i != 0 || j != 0) __builtin_abort(); |
| } |