summaryrefslogtreecommitdiffstats
path: root/libcxx
diff options
context:
space:
mode:
authorHoward Hinnant <hhinnant@apple.com>2013-09-14 18:20:10 +0000
committerHoward Hinnant <hhinnant@apple.com>2013-09-14 18:20:10 +0000
commit3b2d7ee18c5d22b0859bfde0688a1c4957af1bfc (patch)
tree2c5d9cec74663f0d7378a7203c21ae4757b47986 /libcxx
parent401aebab934b54ecf596c8fe628e0e09cf095c97 (diff)
downloadbcm5719-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/future12
-rw-r--r--libcxx/src/future.cpp6
-rw-r--r--libcxx/test/thread/futures/futures.overview/future_errc.pass.cpp6
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, "");
}
OpenPOWER on IntegriCloud