Вот ответ для libc ++.
Поиск condition_variable
в <future>
дал ровно один результат:
// lines 531 -- 538
class _LIBCPP_TYPE_VIS _LIBCPP_AVAILABILITY_FUTURE __assoc_sub_state
: public __shared_count
{
protected:
exception_ptr __exception_;
mutable mutex __mut_;
mutable condition_variable __cv_;
unsigned __state_;
Здесь вводится __assoc_sub_state
. Это базовый класс для __assoc_state
:
// lines 617 -- 619
template <class _Rp>
class _LIBCPP_AVAILABILITY_FUTURE __assoc_state
: public __assoc_sub_state
И, наконец, __assoc_state<_Rp>*
является одновременно членом future<_Rp>
:
// lines 1082 -- 1085
template <class _Rp>
class _LIBCPP_TEMPLATE_VIS _LIBCPP_AVAILABILITY_FUTURE future
{
__assoc_state<_Rp>* __state_;
и член promise<_Rp>
:
// lines 1360 -- 1363
template <class _Rp>
class _LIBCPP_TEMPLATE_VIS _LIBCPP_AVAILABILITY_FUTURE promise
{
__assoc_state<_Rp>* __state_;
Так что да, libc ++ std::promise
внутренне использует std::condition_variable
для уведомления ассоциированного std::future
.