https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86997

Jan Engelhardt <jengelh at inai dot de> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jengelh at inai dot de

--- Comment #4 from Jan Engelhardt <jengelh at inai dot de> ---
>Is it trying to construct an 'a' object and pass that to the NoDestructor? Or 
>just default construct the NoDestructor object?

As I read it, it's definitely the 1-arg form (always), not the default ctor.

auto a = NoDestructor(); // NoDestructor a;
auto b = NoDestructor{}; // NoDestructor b{};
auto c = NoDestructor({}); // NoDestructor c({});
auto d = NoDestructor{{}}; // NoDestructor d{{}};

The actual chromium code is something like

  template<typename T> class NoDestructor { ... }

and is used as

  NoDestructor<std::set<std::string>> google_tlds({"foo"});

which means ({}), if it appears, was intended to mean the empty set, and this
empty set is passed as the first and only parameter to the NoDestructor 1-arg
ctor.

Reply via email to