diff options
author | Howard Hinnant <hhinnant@apple.com> | 2013-09-14 18:20:10 +0000 |
---|---|---|
committer | Howard Hinnant <hhinnant@apple.com> | 2013-09-14 18:20:10 +0000 |
commit | 3b2d7ee18c5d22b0859bfde0688a1c4957af1bfc (patch) | |
tree | 2c5d9cec74663f0d7378a7203c21ae4757b47986 /libcxx | |
parent | 401aebab934b54ecf596c8fe628e0e09cf095c97 (diff) | |
download | bcm5719-llvm-3b2d7ee18c5d22b0859bfde0688a1c4957af1bfc.tar.gz bcm5719-llvm-3b2d7ee18c5d22b0859bfde0688a1c4957af1bfc.zip |
Marshall Clow: LWG Issue 2056: future_errc enums start with value 0 (invalid value for broken_promise).
llvm-svn: 190756
Diffstat (limited to 'libcxx')
-rw-r--r-- | libcxx/include/future | 12 | ||||
-rw-r--r-- | libcxx/src/future.cpp | 6 | ||||
-rw-r--r-- | libcxx/test/thread/futures/futures.overview/future_errc.pass.cpp | 6 |
3 files changed, 15 insertions, 9 deletions
diff --git a/libcxx/include/future b/libcxx/include/future index b249464e431..9c4c70dfb2f 100644 --- a/libcxx/include/future +++ b/libcxx/include/future @@ -19,10 +19,10 @@ namespace std enum class future_errc { - broken_promise, - future_already_retrieved, + future_already_retrieved = 1, promise_already_satisfied, - no_state + no_state, + broken_promise }; enum class launch @@ -379,10 +379,10 @@ _LIBCPP_BEGIN_NAMESPACE_STD //enum class future_errc _LIBCPP_DECLARE_STRONG_ENUM(future_errc) { - broken_promise, - future_already_retrieved, + future_already_retrieved = 1, promise_already_satisfied, - no_state + no_state, + broken_promise }; _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(future_errc) diff --git a/libcxx/src/future.cpp b/libcxx/src/future.cpp index 7d9a5b5da69..70919ab7df8 100644 --- a/libcxx/src/future.cpp +++ b/libcxx/src/future.cpp @@ -26,11 +26,15 @@ __future_error_category::name() const _NOEXCEPT return "future"; } +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wswitch" + string __future_error_category::message(int ev) const { switch (static_cast<future_errc>(ev)) { + case future_errc(0): // For backwards compatibility with C++11 (LWG 2056) case future_errc::broken_promise: return string("The associated promise has been destructed prior " "to the associated state becoming ready."); @@ -46,6 +50,8 @@ __future_error_category::message(int ev) const return string("unspecified future_errc value\n"); } +#pragma clang diagnostic pop + const error_category& future_category() _NOEXCEPT { diff --git a/libcxx/test/thread/futures/futures.overview/future_errc.pass.cpp b/libcxx/test/thread/futures/futures.overview/future_errc.pass.cpp index 6ffaca47427..7b3b70a39a6 100644 --- a/libcxx/test/thread/futures/futures.overview/future_errc.pass.cpp +++ b/libcxx/test/thread/futures/futures.overview/future_errc.pass.cpp @@ -11,18 +11,18 @@ // enum class future_errc // { -// broken_promise, -// future_already_retrieved, +// future_already_retrieved = 1, // promise_already_satisfied, // no_state +// broken_promise, // }; #include <future> int main() { - static_assert(static_cast<int>(std::future_errc::broken_promise) == 0, ""); static_assert(static_cast<int>(std::future_errc::future_already_retrieved) == 1, ""); static_assert(static_cast<int>(std::future_errc::promise_already_satisfied) == 2, ""); static_assert(static_cast<int>(std::future_errc::no_state) == 3, ""); + static_assert(static_cast<int>(std::future_errc::broken_promise) == 4, ""); } |