This is necessary for systems that treat all system headers as
implicitly extern "C" (at least AIX and OpenBSD) because otherwise the
empty parameter list is treated as declaring void __once_proxy(...)

This has come up recently because we are now enabling <mutex> etc. on
additional platforms.

        PR libstdc++/50982
        * include/std/mutex (__once_proxy): Use void parameter list to
        work on implicit extern "C" systems.

Tested x86_64-linux and with reports of this solving bootstrap
failures on AIX and OpenBSD, committed to trunk.

Index: include/std/mutex
===================================================================
--- include/std/mutex   (revision 181054)
+++ include/std/mutex   (working copy)
@@ -796,7 +796,7 @@
   __get_once_mutex();
 #endif

-  extern "C" void __once_proxy();
+  extern "C" void __once_proxy(void);

   /// call_once
   template<typename _Callable, typename... _Args>

Reply via email to