This patch marks *most* tests for std::promise, std::future and std::shared_future as unsupported in C++03. These tests fail in C++03 mode because they attempt to copy a std::future even though it is a MoveOnly type. AFAIK the missing move-semantics in std::future is the only reason these tests fail but without move semantics these classes are useless. For example even though std::promise::set_value and std::promise::set_exception(...) work in C++03 std::promise is still useless because we cannot call std::promise::get_future(...).
It might be possible to hack std::move(...) like we do for std::unique_ptr to make the move semantics work but I don't think it is worth the effort. Instead I think we should leave the <future> header as-is and mark the failing tests as UNSUPPORTED. I don't believe there are any users of std::future or std::promise in C++03 because they are so unusable. Therefore I am not concerned about losing test coverage and possibly breaking users. However because there are still parts of <future> that work in C++03 it would be wrong to #ifdef out the entire header.
@mclow.lists Should we take further steps to prevent the use of std::promise, std::future and std::shared_future in C++03?
Note: This patch also cleans up the tests and converts them to use support/test_allocator.h instead of a duplicate class in test/std/futures/test_allocator.h.