Marshall Clow: LWG Issue 2056: future_errc enums start with value 0 (invalid value for broken_promise).
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@190756 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a49a2c9deb
commit
cd942f1840
@ -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)
|
||||
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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, "");
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user