Building with VS2013, specifying time_point::max() to a condition variable's wait_until results in an immediate timeout. 
This seems unintuitive - I would naively expect time_point::max() to wait indefinitely (or at least a very long time). Can anyone confirm if this is documented, expected behaviour or something specific to MSVC?
Sample program below; note replacing time_point::max() with now + std::chrono::hours(1) gives the expected behaviour (wait_for exits once cv is notified, with no timeout)
#include <condition_variable>
#include <mutex>
#include <chrono>
#include <future>
#include <functional>
void fire_cv( std::mutex *mx, std::condition_variable *cv )
{
    std::unique_lock<std::mutex> lock(*mx);
    printf("firing cv\n");
    cv->notify_one();
}
int main(int argc, char *argv[])
{
    std::chrono::steady_clock::time_point now = std::chrono::steady_clock::now();
    std::condition_variable test_cv;
    std::mutex test_mutex;
    std::future<void> s;
    {
        std::unique_lock<std::mutex> lock(test_mutex);
        s = std::async(std::launch::async, std::bind(fire_cv, &test_mutex, &test_cv));
        printf("blocking on cv\n");
        std::cv_status result = test_cv.wait_until( lock, std::chrono::steady_clock::time_point::max() );
        //std::cv_status result = test_cv.wait_until( lock, now + std::chrono::hours(1) ); // <--- this works as expected!
        printf("%s\n", (result==std::cv_status::timeout) ? "timeout" : "no timeout");
    }
    s.wait();
    return 0;
}
 
    