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
|
enum class future_errc
|
||||||
{
|
{
|
||||||
broken_promise,
|
future_already_retrieved = 1,
|
||||||
future_already_retrieved,
|
|
||||||
promise_already_satisfied,
|
promise_already_satisfied,
|
||||||
no_state
|
no_state,
|
||||||
|
broken_promise
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class launch
|
enum class launch
|
||||||
@ -379,10 +379,10 @@ _LIBCPP_BEGIN_NAMESPACE_STD
|
|||||||
//enum class future_errc
|
//enum class future_errc
|
||||||
_LIBCPP_DECLARE_STRONG_ENUM(future_errc)
|
_LIBCPP_DECLARE_STRONG_ENUM(future_errc)
|
||||||
{
|
{
|
||||||
broken_promise,
|
future_already_retrieved = 1,
|
||||||
future_already_retrieved,
|
|
||||||
promise_already_satisfied,
|
promise_already_satisfied,
|
||||||
no_state
|
no_state,
|
||||||
|
broken_promise
|
||||||
};
|
};
|
||||||
_LIBCPP_DECLARE_STRONG_ENUM_EPILOG(future_errc)
|
_LIBCPP_DECLARE_STRONG_ENUM_EPILOG(future_errc)
|
||||||
|
|
||||||
|
@ -26,11 +26,15 @@ __future_error_category::name() const _NOEXCEPT
|
|||||||
return "future";
|
return "future";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wswitch"
|
||||||
|
|
||||||
string
|
string
|
||||||
__future_error_category::message(int ev) const
|
__future_error_category::message(int ev) const
|
||||||
{
|
{
|
||||||
switch (static_cast<future_errc>(ev))
|
switch (static_cast<future_errc>(ev))
|
||||||
{
|
{
|
||||||
|
case future_errc(0): // For backwards compatibility with C++11 (LWG 2056)
|
||||||
case future_errc::broken_promise:
|
case future_errc::broken_promise:
|
||||||
return string("The associated promise has been destructed prior "
|
return string("The associated promise has been destructed prior "
|
||||||
"to the associated state becoming ready.");
|
"to the associated state becoming ready.");
|
||||||
@ -46,6 +50,8 @@ __future_error_category::message(int ev) const
|
|||||||
return string("unspecified future_errc value\n");
|
return string("unspecified future_errc value\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
|
||||||
const error_category&
|
const error_category&
|
||||||
future_category() _NOEXCEPT
|
future_category() _NOEXCEPT
|
||||||
{
|
{
|
||||||
|
@ -11,18 +11,18 @@
|
|||||||
|
|
||||||
// enum class future_errc
|
// enum class future_errc
|
||||||
// {
|
// {
|
||||||
// broken_promise,
|
// future_already_retrieved = 1,
|
||||||
// future_already_retrieved,
|
|
||||||
// promise_already_satisfied,
|
// promise_already_satisfied,
|
||||||
// no_state
|
// no_state
|
||||||
|
// broken_promise,
|
||||||
// };
|
// };
|
||||||
|
|
||||||
#include <future>
|
#include <future>
|
||||||
|
|
||||||
int main()
|
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::future_already_retrieved) == 1, "");
|
||||||
static_assert(static_cast<int>(std::future_errc::promise_already_satisfied) == 2, "");
|
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::no_state) == 3, "");
|
||||||
|
static_assert(static_cast<int>(std::future_errc::broken_promise) == 4, "");
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user