|
26 | 26 |
|
27 | 27 | template <typename T, typename U> |
28 | 28 | concept has_compare_exchange_strong_1 = |
29 | | - requires { std::declval<T>().compare_exchange_strong(std::declval<U&>(), std::declval<U>()); }; |
| 29 | + requires(T const& x, U& expected, U desired) { x.compare_exchange_strong(expected, desired); }; |
30 | 30 | template <typename T, typename U> |
31 | | -concept has_compare_exchange_strong_2 = requires { |
32 | | - std::declval<T>().compare_exchange_strong(std::declval<U&>(), std::declval<U>(), std::declval<std::memory_order>()); |
| 31 | +concept has_compare_exchange_strong_2 = requires(T const& x, U& expected, U desired, std::memory_order order) { |
| 32 | + x.compare_exchange_strong(expected, desired, order); |
33 | 33 | }; |
34 | 34 | template <typename T, typename U> |
35 | | -concept has_compare_exchange_strong_3 = requires { |
36 | | - std::declval<T>().compare_exchange_strong( |
37 | | - std::declval<U&>(), std::declval<U>(), std::declval<std::memory_order>(), std::declval<std::memory_order>()); |
38 | | -}; |
| 35 | +concept has_compare_exchange_strong_3 = |
| 36 | + requires(T const& x, U& expected, U desired, std::memory_order success, std::memory_order failure) { |
| 37 | + x.compare_exchange_strong(expected, desired, success, failure); |
| 38 | + }; |
39 | 39 |
|
40 | 40 | template <typename T, typename U> |
41 | 41 | concept has_compare_exchange_strong = |
|
0 commit comments