Skip to content

P0439R0 enum class memory_order #124

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Sep 27, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions stl/inc/atomic
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ _Ty kill_dependency(_Ty _Arg) noexcept { // "magic" template that kills dependen
// FUNCTION _Check_memory_order
inline void _Check_memory_order(const memory_order _Order) noexcept {
// check that _Order is a valid memory_order
if (static_cast<unsigned int>(_Order) > memory_order_seq_cst) {
if (static_cast<unsigned int>(_Order) > static_cast<unsigned int>(memory_order_seq_cst)) {
_INVALID_MEMORY_ORDER;
}
}
Expand Down Expand Up @@ -230,7 +230,7 @@ _NODISCARD inline memory_order _Combine_cas_memory_orders(

_Check_memory_order(_Success);
_Check_load_memory_order(_Failure);
return _Combined_memory_orders[_Success][_Failure];
return _Combined_memory_orders[static_cast<int>(_Success)][static_cast<int>(_Failure)];
}

// FUNCTION TEMPLATE _Atomic_reinterpret_as
Expand Down
11 changes: 11 additions & 0 deletions stl/inc/xatomic.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,16 @@ _STL_DISABLE_CLANG_WARNINGS

_STD_BEGIN

#if _HAS_CXX20
// ENUM CLASS memory_order
enum class memory_order : int { relaxed, consume, acquire, release, acq_rel, seq_cst };
inline constexpr memory_order memory_order_relaxed = memory_order::relaxed;
inline constexpr memory_order memory_order_consume = memory_order::consume;
inline constexpr memory_order memory_order_acquire = memory_order::acquire;
inline constexpr memory_order memory_order_release = memory_order::release;
inline constexpr memory_order memory_order_acq_rel = memory_order::acq_rel;
inline constexpr memory_order memory_order_seq_cst = memory_order::seq_cst;
#else // _HAS_CXX20
// ENUM memory_order
enum memory_order {
memory_order_relaxed,
Expand All @@ -64,6 +74,7 @@ enum memory_order {
memory_order_acq_rel,
memory_order_seq_cst
};
#endif // _HAS_CXX20

using _Atomic_counter_t = unsigned long;

Expand Down
1 change: 1 addition & 0 deletions stl/inc/yvals_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
// P0020R6 atomic<float>, atomic<double>, atomic<long double>
// P0318R1 unwrap_reference, unwrap_ref_decay
// P0325R4 to_array()
// P0439R0 enum class memory_order
// P0457R2 starts_with()/ends_with() For basic_string/basic_string_view
// P0458R2 contains() For Ordered And Unordered Associative Containers
// P0463R1 endian
Expand Down