Created on 2009-10-05.00:00:00 last changed 170 months ago
Proposed resolution:
Change in [futures.overview], header <future> synopsis:
externconst error_category&* constfuture_category();
In [futures.overview]/1, Header <future> synopsis change as indicated:
constexprerror_code make_error_code(future_errc e);constexprerror_condition make_error_condition(future_errc e);
Change in [futures.errors]:
externconst error_category&* constfuture_category();
1- future_category shall point to a statically initialized object of a type derived from class error_category.1- Returns: A reference to an object of a type derived from class error_category.
constexprerror_code make_error_code(future_errc e);3 Returns: error_code(static_cast<int>(e),
*future_category()).constexprerror_codecondition make_error_condition(future_errc e);4 Returns: error_condition(static_cast<int>(e),
*future_category()).
Rationale:
Solved by N3058.
[ 2010 Pittsburgh: ]
Moved to
NAD EditorialResolved. Rationale added below.
[ 2009-11-13 Moved to Tentatively Ready after 5 positive votes on c++std-lib. ]
[ 2009-11-11 Daniel adds: ]
I just observe that the proposed resolution of this issue is incomplete and needs to reworded. The problem is that the corresponding declarations
constexpr error_code make_error_code(future_errc e); constexpr error_condition make_error_condition(future_errc e);as constexpr functions are incompatible to the requirements of constexpr functions given their specified implementation. Note that the incompatibility is not a result of the modifications proposed by the issue resolution, but already existed within the N2960 state where we have
extern const error_category* const future_category;combined with
constexpr error_code make_error_code(future_errc e);3 Returns: error_code(static_cast<int>(e), *future_category).
constexpr error_code make_error_condition(future_errc e);4 Returns: error_condition(static_cast<int>(e), *future_category).
Neither is any of the constructors of error_code and error_condition constexpr, nor does the expression *future_category satisfy the requirements for a constant expression ([expr.const]/2 bullet 6 in N3000).
The simple solution is just to remove the constexpr qualifiers for both functions, which makes sense, because none of the remaining make_error_* overloads in the library is constexpr. One might consider to realize that those make_* functions could satisfy the constexpr requirements, but this looks not like an easy task to me, because it would need to rely on a not yet existing language feature. If such a change is wanted, a new issue should be opened after the language extension approval (if at all) [1].
If no-one complaints I would like to ask Howard to add the following modifications to this issue, alternatively a new issue could be opened but I don't know what the best solution is that would cause as little overhead as possible.
What-ever the route is, the following is my proposed resolution for this issue interaction part of the story:
In [futures.overview]/1, Header <future> synopsis and in [futures.errors]/3+4 change as indicated:
constexprerror_code make_error_code(future_errc e);constexprerror_condition make_error_condition(future_errc e);[1] Let me add that we have a related NAD issue here: 832 so the chances for realization are little IMO.
Howard: I've updated the proposed wording as Daniel suggests and set to Review.
[ 2009-10-27 Howard: ]
Moved to Tentatively Ready after 5 positive votes on c++std-lib.
Defect issue 890 overlooked to adapt the future_category from [futures.overview] and [futures.errors]:
extern const error_category* const future_category;
which should be similarly transformed into function form.
History | |||
---|---|---|---|
Date | User | Action | Args |
2010-12-05 00:09:22 | admin | set | status: nad editorial -> resolved |
2010-10-21 18:28:33 | admin | set | messages: + msg1226 |
2010-10-21 18:28:33 | admin | set | messages: + msg1225 |
2010-10-21 18:28:33 | admin | set | messages: + msg1224 |
2010-10-21 18:28:33 | admin | set | messages: + msg1223 |
2010-10-21 18:28:33 | admin | set | messages: + msg1222 |
2010-10-21 18:28:33 | admin | set | messages: + msg1221 |
2009-10-05 00:00:00 | admin | create |