https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105730
--- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> --- I think this should solve the problem: --- a/libstdc++-v3/src/c++11/compatibility-condvar.cc +++ b/libstdc++-v3/src/c++11/compatibility-condvar.cc @@ -67,6 +67,22 @@ _GLIBCXX_END_NAMESPACE_VERSION && defined(_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT) namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) { +namespace +{ + std::__condvar std::condition_variable::* __base_member; + + template<std::__condvar std::condition_variable::*X> + struct cracker + { + static std::__condvar std::condition_variable::* value; + }; + template<std::__condvar std::condition_variable::*X> + std::__condvar std::condition_variable::* + cracker<X>::value = __base_member = X; + + template class cracker<&std::condition_variable::_M_cond>; +} + struct __nothrow_wait_cv : std::condition_variable { void wait(std::unique_lock<std::mutex>&) noexcept; @@ -76,7 +92,7 @@ __attribute__((used)) void __nothrow_wait_cv::wait(std::unique_lock<std::mutex>& lock) noexcept { - this->condition_variable::wait(lock); + (this->*__base_member).wait(*lock.mutex()); } } // namespace __gnu_cxx