66#include < type_traits>
77#include < utility>
88
9+ #define ZEUS_EXPECTED_VERSION_MAJOR 1
10+ #define ZEUS_EXPECTED_VERSION_MINOR 0
11+ #define ZEUS_EXPECTED_VERSION_PATCH 0
12+
913#if __cplusplus < 201'703L
1014static_assert (false , " This expected variant requires C++17" );
1115#endif
@@ -16,8 +20,32 @@ static_assert(false, "This expected variant requires C++17");
1620 #define ZEUS_EXPECTED_CONSTEXPR_DTOR
1721#endif
1822
19- namespace zeus
20- {
23+ #define ZEUS_EXPECTED_ABI_TAG expected_abi
24+
25+ #define ZEUS_EXPECTED_NS_VERSION_CONCAT_EX (major, minor, patch ) _v##major##_##minor##_##patch
26+ #define ZEUS_EXPECTED_NS_VERSION_CONCAT (major, minor, patch ) ZEUS_EXPECTED_NS_VERSION_CONCAT_EX(major, minor, patch)
27+
28+ #define ZEUS_EXPECTED_NS_VERSION \
29+ ZEUS_EXPECTED_NS_VERSION_CONCAT (ZEUS_EXPECTED_VERSION_MAJOR, ZEUS_EXPECTED_VERSION_MINOR, ZEUS_EXPECTED_VERSION_PATCH)
30+
31+ #define ZEUS_EXPECTED_NS_CONCAT_EX (a, b ) a##b
32+ #define ZEUS_EXPECTED_NS_CONCAT (a, b ) ZEUS_EXPECTED_NS_CONCAT_EX(a, b)
33+
34+ #ifndef ZEUS_EXPECTED_NAMESPACE
35+ #define ZEUS_EXPECTED_NAMESPACE zeus::ZEUS_EXPECTED_NS_CONCAT (ZEUS_EXPECTED_ABI_TAG, ZEUS_EXPECTED_NS_VERSION)
36+ #endif
37+
38+ #define ZEUS_EXPECTED_NS_BEGIN \
39+ namespace zeus \
40+ { \
41+ inline namespace ZEUS_EXPECTED_NS_CONCAT ( ZEUS_EXPECTED_ABI_TAG, ZEUS_EXPECTED_NS_VERSION) \
42+ {
43+
44+ #define ZEUS_EXPECTED_NS_END \
45+ } \
46+ }
47+
48+ ZEUS_EXPECTED_NS_BEGIN
2149
2250namespace expected_detail
2351{
@@ -2714,6 +2742,6 @@ constexpr void swap(expected<void, E> &lhs, expected<void, E> &rhs) noexcept(noe
27142742 lhs.swap (rhs);
27152743}
27162744
2717- } // namespace zeus
2745+ ZEUS_EXPECTED_NS_END
27182746
27192747#endif
0 commit comments