1717
1818#include " __config.hpp"
1919
20+ #if STDEXEC_HAS_EXECUTION_POLICY()
21+ #include < execution>
22+ #endif
23+
2024namespace stdexec {
2125
2226#if STDEXEC_HAS_EXECUTION_POLICY()
2327
2428 using sequenced_policy = std::execution::sequenced_policy;
2529 using parallel_policy = std::execution::parallel_policy;
2630 using parallel_unsequenced_policy = std::execution::parallel_unsequenced_policy;
27- using unsequenced_policy = std::execution::unsequenced_policy;
2831
29- using seq = std::execution::seq;
30- using par = std::execution::par;
31- using par_unseq = std::execution::par_unseq;
32- using unseq = std::execution::unseq;
32+ constexpr auto seq = std::execution::seq;
33+ constexpr auto par = std::execution::par;
34+ constexpr auto par_unseq = std::execution::par_unseq;
3335
34- using std::execution:: is_execution_policy_v;
35- using std::execution:: is_execution_policy;
36+ using std::is_execution_policy_v;
37+ using std::is_execution_policy;
3638
3739#else
3840
@@ -56,16 +58,9 @@ namespace stdexec {
5658 parallel_unsequenced_policy& operator =(const parallel_unsequenced_policy&) = delete ;
5759 };
5860
59- struct unsequenced_policy {
60- constexpr explicit unsequenced_policy (__hidden_construction) { };
61- unsequenced_policy (const unsequenced_policy&) = delete ;
62- unsequenced_policy& operator =(const unsequenced_policy&) = delete ;
63- };
64-
6561 inline constexpr sequenced_policy seq{__hidden_construction{}};
6662 inline constexpr parallel_policy par{__hidden_construction{}};
6763 inline constexpr parallel_unsequenced_policy par_unseq{__hidden_construction{}};
68- inline constexpr unsequenced_policy unseq{__hidden_construction{}};
6964
7065 template <typename >
7166 inline constexpr bool is_execution_policy_v = false ;
@@ -79,11 +74,35 @@ namespace stdexec {
7974 template <>
8075 inline constexpr bool is_execution_policy_v<parallel_unsequenced_policy> = true ;
8176
82- template <>
83- inline constexpr bool is_execution_policy_v<unsequenced_policy> = true ;
84-
8577 template <class _T >
8678 struct is_execution_policy : std::bool_constant<is_execution_policy_v<_T>> { };
8779
8880#endif
81+
82+ #if STDEXEC_HAS_UNSEQUENCED_EXECUTION_POLICY()
83+
84+ using unsequenced_policy = std::execution::unsequenced_policy;
85+
86+ constexpr auto unseq = std::execution::unseq;
87+
88+ #else
89+
90+ #if STDEXEC_HAS_EXECUTION_POLICY()
91+ // already defined above
92+ struct __hidden_construction { };
93+ #endif
94+
95+ struct unsequenced_policy {
96+ constexpr explicit unsequenced_policy (__hidden_construction) { };
97+ unsequenced_policy (const unsequenced_policy&) = delete ;
98+ unsequenced_policy& operator =(const unsequenced_policy&) = delete ;
99+ };
100+
101+ inline constexpr unsequenced_policy unseq{__hidden_construction{}};
102+
103+ template <>
104+ inline constexpr bool is_execution_policy_v<unsequenced_policy> = true ;
105+
106+ #endif
107+
89108} // namespace stdexec
0 commit comments