------------------------------------------------- -----------------
``__cpp_lib_is_scoped_enum`` ``202011L``
------------------------------------------------- -----------------
- ``__cpp_lib_monadic_optional`` ``202110L``
- ------------------------------------------------- -----------------
``__cpp_lib_move_only_function`` *unimplemented*
------------------------------------------------- -----------------
+ ``__cpp_lib_optional`` ``202110L``
+ ------------------------------------------------- -----------------
``__cpp_lib_out_ptr`` *unimplemented*
------------------------------------------------- -----------------
``__cpp_lib_ranges_chunk`` *unimplemented*
.. [#note-P0966] P0966: It was previously erroneously marked as complete in version 8.0. See `bug 45368 <https://llvm.org/PR45368>`__.
.. [#note-P0619] P0619: Only sections D.8, D.9, D.10 and D.13 are implemented. Sections D.4, D.7, D.11, D.12, and D.14 remain undone.
.. [#note-P0883] P0883: shared_ptr and floating-point changes weren't applied as they themselves aren't implemented yet.
+ .. [#note-P2231] P2231: Optional is complete. The changes to variant haven't been implemented yet.
.. _issues-status-cxx20:
"`P2106R0 <https://wg21.link/P2106R0>`__","LWG","Alternative wording for GB315 and GB316","Prague","* *",""
"`P2116R0 <https://wg21.link/P2116R0>`__","LWG","Remove tuple-like protocol support from fixed-extent span","Prague","|Complete|","11.0"
"","","","","",""
-"`P2231R1 <https://wg21.link/P2231R1>`__","LWG","Missing constexpr in std::optional and std::variant","June 2021","|In progress|","13.0"
+"`P2231R1 <https://wg21.link/P2231R1>`__","LWG","Missing constexpr in std::optional and std::variant","June 2021","|Partial| [#note-P2231]_","13.0"
"`P2325R3 <https://wg21.link/P2325R3>`__","LWG","Views should not be required to be default constructible","June 2021","|In progress|",""
"`P2210R2 <https://wg21.link/P2210R2>`__","LWG",Superior String Splitting,"June 2021","",""
"`P2216R3 <https://wg21.link/P2216R3>`__","LWG",std::format improvements,"June 2021","|Partial|",""
"`3616 <https://wg21.link/LWG3616>`__","LWG 3498 seems to miss the non-member ``swap`` for ``basic_syncbuf`` ","February 2022","",""
"`3618 <https://wg21.link/LWG3618>`__","Unnecessary ``iter_move`` for ``transform_view::iterator`` ","February 2022","","","|ranges|"
"`3619 <https://wg21.link/LWG3619>`__","Specification of ``vformat_to`` contains ill-formed ``formatted_size`` calls","February 2022","|Nothing to do|","","|format|"
-"`3621 <https://wg21.link/LWG3621>`__","Remove feature-test macro ``__cpp_lib_monadic_optional`` ","February 2022","",""
+"`3621 <https://wg21.link/LWG3621>`__","Remove feature-test macro ``__cpp_lib_monadic_optional`` ","February 2022","|Complete|","15.0"
"`3632 <https://wg21.link/LWG3632>`__","``unique_ptr`` ""Mandates: This constructor is not selected by class template argument deduction""","February 2022","|Nothing to do|",""
"`3643 <https://wg21.link/LWG3643>`__","Missing ``constexpr`` in ``std::counted_iterator`` ","February 2022","",""
"`3648 <https://wg21.link/LWG3648>`__","``format`` should not print ``bool`` with ``'c'`` ","February 2022","|Complete|","15.0","|format|"
template <class U, class... Args>
constexpr explicit optional(in_place_t, initializer_list<U>, Args &&...);
template <class U = T>
- constexpr EXPLICIT optional(U &&);
+ constexpr explicit(see-below) optional(U &&);
template <class U>
- EXPLICIT optional(const optional<U> &); // constexpr in C++20
+ explicit(see-below) optional(const optional<U> &); // constexpr in C++20
template <class U>
- EXPLICIT optional(optional<U> &&); // constexpr in C++20
+ explicit(see-below) optional(optional<U> &&); // constexpr in C++20
// 23.6.3.2, destructor
~optional(); // constexpr in C++20
__cpp_lib_math_constants 201907L <numbers>
__cpp_lib_math_special_functions 201603L <cmath>
__cpp_lib_memory_resource 201603L <memory_resource>
-__cpp_lib_monadic_optional 202110L <optional>
__cpp_lib_move_only_function 202110L <functional>
__cpp_lib_node_extract 201606L <map> <set> <unordered_map>
<unordered_set>
<unordered_map> <unordered_set> <vector>
__cpp_lib_not_fn 201603L <functional>
__cpp_lib_null_iterators 201304L <iterator>
-__cpp_lib_optional 201606L <optional>
+__cpp_lib_optional 202110L <optional>
+ 201606L // C++17
__cpp_lib_out_ptr 202106L <memory>
__cpp_lib_parallel_algorithm 201603L <algorithm> <numeric>
__cpp_lib_polymorphic_allocator 201902L <memory_resource>
// # define __cpp_lib_constexpr_typeinfo 202106L
// # define __cpp_lib_invoke_r 202106L
# define __cpp_lib_is_scoped_enum 202011L
-# define __cpp_lib_monadic_optional 202110L
// # define __cpp_lib_move_only_function 202110L
+# undef __cpp_lib_optional
+# define __cpp_lib_optional 202110L
// # define __cpp_lib_out_ptr 202106L
// # define __cpp_lib_ranges_chunk 202202L
// # define __cpp_lib_ranges_chunk_by 202202L
// Test the feature test macros defined by <optional>
-/* Constant Value
- __cpp_lib_monadic_optional 202110L [C++2b]
- __cpp_lib_optional 201606L [C++17]
+/* Constant Value
+ __cpp_lib_optional 201606L [C++17]
+ 202110L [C++2b]
*/
#include <optional>
#if TEST_STD_VER < 14
-# ifdef __cpp_lib_monadic_optional
-# error "__cpp_lib_monadic_optional should not be defined before c++2b"
-# endif
-
# ifdef __cpp_lib_optional
# error "__cpp_lib_optional should not be defined before c++17"
# endif
#elif TEST_STD_VER == 14
-# ifdef __cpp_lib_monadic_optional
-# error "__cpp_lib_monadic_optional should not be defined before c++2b"
-# endif
-
# ifdef __cpp_lib_optional
# error "__cpp_lib_optional should not be defined before c++17"
# endif
#elif TEST_STD_VER == 17
-# ifdef __cpp_lib_monadic_optional
-# error "__cpp_lib_monadic_optional should not be defined before c++2b"
-# endif
-
# ifndef __cpp_lib_optional
# error "__cpp_lib_optional should be defined in c++17"
# endif
#elif TEST_STD_VER == 20
-# ifdef __cpp_lib_monadic_optional
-# error "__cpp_lib_monadic_optional should not be defined before c++2b"
-# endif
-
# ifndef __cpp_lib_optional
# error "__cpp_lib_optional should be defined in c++20"
# endif
#elif TEST_STD_VER > 20
-# ifndef __cpp_lib_monadic_optional
-# error "__cpp_lib_monadic_optional should be defined in c++2b"
-# endif
-# if __cpp_lib_monadic_optional != 202110L
-# error "__cpp_lib_monadic_optional should have the value 202110L in c++2b"
-# endif
-
# ifndef __cpp_lib_optional
# error "__cpp_lib_optional should be defined in c++2b"
# endif
-# if __cpp_lib_optional != 201606L
-# error "__cpp_lib_optional should have the value 201606L in c++2b"
+# if __cpp_lib_optional != 202110L
+# error "__cpp_lib_optional should have the value 202110L in c++2b"
# endif
#endif // TEST_STD_VER > 20
__cpp_lib_math_constants 201907L [C++20]
__cpp_lib_math_special_functions 201603L [C++17]
__cpp_lib_memory_resource 201603L [C++17]
- __cpp_lib_monadic_optional 202110L [C++2b]
__cpp_lib_move_only_function 202110L [C++2b]
__cpp_lib_node_extract 201606L [C++17]
__cpp_lib_nonmember_container_access 201411L [C++17]
__cpp_lib_not_fn 201603L [C++17]
__cpp_lib_null_iterators 201304L [C++14]
__cpp_lib_optional 201606L [C++17]
+ 202110L [C++2b]
__cpp_lib_out_ptr 202106L [C++2b]
__cpp_lib_parallel_algorithm 201603L [C++17]
__cpp_lib_polymorphic_allocator 201902L [C++20]
# error "__cpp_lib_memory_resource should not be defined before c++17"
# endif
-# ifdef __cpp_lib_monadic_optional
-# error "__cpp_lib_monadic_optional should not be defined before c++2b"
-# endif
-
# ifdef __cpp_lib_move_only_function
# error "__cpp_lib_move_only_function should not be defined before c++2b"
# endif
# error "__cpp_lib_memory_resource should not be defined before c++17"
# endif
-# ifdef __cpp_lib_monadic_optional
-# error "__cpp_lib_monadic_optional should not be defined before c++2b"
-# endif
-
# ifdef __cpp_lib_move_only_function
# error "__cpp_lib_move_only_function should not be defined before c++2b"
# endif
# endif
# endif
-# ifdef __cpp_lib_monadic_optional
-# error "__cpp_lib_monadic_optional should not be defined before c++2b"
-# endif
-
# ifdef __cpp_lib_move_only_function
# error "__cpp_lib_move_only_function should not be defined before c++2b"
# endif
# endif
# endif
-# ifdef __cpp_lib_monadic_optional
-# error "__cpp_lib_monadic_optional should not be defined before c++2b"
-# endif
-
# ifdef __cpp_lib_move_only_function
# error "__cpp_lib_move_only_function should not be defined before c++2b"
# endif
# endif
# endif
-# ifndef __cpp_lib_monadic_optional
-# error "__cpp_lib_monadic_optional should be defined in c++2b"
-# endif
-# if __cpp_lib_monadic_optional != 202110L
-# error "__cpp_lib_monadic_optional should have the value 202110L in c++2b"
-# endif
-
# if !defined(_LIBCPP_VERSION)
# ifndef __cpp_lib_move_only_function
# error "__cpp_lib_move_only_function should be defined in c++2b"
# ifndef __cpp_lib_optional
# error "__cpp_lib_optional should be defined in c++2b"
# endif
-# if __cpp_lib_optional != 201606L
-# error "__cpp_lib_optional should have the value 201606L in c++2b"
+# if __cpp_lib_optional != 202110L
+# error "__cpp_lib_optional should have the value 202110L in c++2b"
# endif
# if !defined(_LIBCPP_VERSION)
"headers": ["memory_resource"],
"unimplemented": True,
}, {
- "name": "__cpp_lib_monadic_optional",
- "values": { "c++2b": 202110 },
- "headers": ["optional"],
- }, {
"name": "__cpp_lib_move_only_function",
"values": { "c++2b": 202110 },
"headers": ["functional"],
"headers": ["iterator"],
}, {
"name": "__cpp_lib_optional",
- "values": { "c++17": 201606 },
+ "values": { "c++17": 201606, "c++2b": 202110 },
"headers": ["optional"],
}, {
"name": "__cpp_lib_out_ptr",