https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86347
--- Comment #2 from stinkingmadgod at gmail dot com --- Apologies, not familiar with netiquette here #include<memory> #include<iostream> #include<cstdlib> void* operator new(size_t n) { std::cout << "new\n"; return std::malloc(n); } struct Y { Y() { std::cout << "Y()\n"; } Y(const Y&) { std::cout << "Y(const Y&)\n"; throw "tantrum"; } }; struct X { X(Y y) noexcept { } }; int main() { try { [[maybe_unused]] Y y; new X{y}; } catch(...) { } } Online link: http://coliru.stacked-crooked.com/a/53fac07bba9fcb74