https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86997
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- Don't write weird code? Either of these works fine and is obvious what it is supposed to do: NoDestructor b; NoDestructor b{}; The original is weird. Is it trying to construct an 'a' object and pass that to the NoDestructor? Or just default construct the NoDestructor object?