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>