
Niall Douglas wrote:
The standard says nothing about what is or is not a spurious wakeup unfortunately.
What does it matter? We all know what is or is not a spurious wakeup - a return from the wait without the condition being notified.
Actually, I spoke too soon. This is what the standard says: template <class Clock, class Duration> cv_status wait_until(unique_lock<mutex>& lock, const chrono::time_point<Clock, Duration>& abs_time); Effects: — The function will unblock when signaled by a call to notify_one(), a call to notify_all(), expiration of the absolute timeout (30.2.4) specified by abs_time, or spuriously. Returns: cv_status::timeout if the absolute timeout (30.2.4) specified by abs_time expired, otherwise cv_status::no_timeout. This seems pretty clear to me.