diff options
author | Petr Hosek <phosek@google.com> | 2024-01-22 16:55:12 +0000 |
---|---|---|
committer | Petr Hosek <phosek@google.com> | 2024-01-22 17:23:05 +0000 |
commit | 02f95b77515fe18ed1076b94cbb850ea0cf3c77e (patch) | |
tree | bed373719b86f3ce17dce7e6909615387aadb6ae /libcxx/include/__format | |
parent | ed760d170f18b3ca9f53f4e4a2e31d82bf0ba3e7 (diff) | |
download | llvm-02f95b77515fe18ed1076b94cbb850ea0cf3c77e.zip llvm-02f95b77515fe18ed1076b94cbb850ea0cf3c77e.tar.gz llvm-02f95b77515fe18ed1076b94cbb850ea0cf3c77e.tar.bz2 |
Revert "[libc++][format] P2637R3: Member `visit` (`std::basic_format_arg`) (#76449)"
This reverts commit 7d9b5aa65b09126031e1c2903605a7d34aea4bc1 since
std/utilities/format/format.arguments/format.arg/visit.return_type.pass.cpp
is failing on Windows when building with Clang-cl.
Diffstat (limited to 'libcxx/include/__format')
-rw-r--r-- | libcxx/include/__format/format_arg.h | 109 | ||||
-rw-r--r-- | libcxx/include/__format/format_context.h | 33 |
2 files changed, 17 insertions, 125 deletions
diff --git a/libcxx/include/__format/format_arg.h b/libcxx/include/__format/format_arg.h index 02ee3ce..10fca15d 100644 --- a/libcxx/include/__format/format_arg.h +++ b/libcxx/include/__format/format_arg.h @@ -93,7 +93,7 @@ _LIBCPP_HIDE_FROM_ABI constexpr __arg_t __get_packed_type(uint64_t __types, size } // namespace __format -// This function is not user observable, so it can directly use the non-standard +// This function is not user obervable, so it can directly use the non-standard // types of the "variant". See __arg_t for more details. template <class _Visitor, class _Context> _LIBCPP_HIDE_FROM_ABI decltype(auto) __visit_format_arg(_Visitor&& __vis, basic_format_arg<_Context> __arg) { @@ -144,59 +144,6 @@ _LIBCPP_HIDE_FROM_ABI decltype(auto) __visit_format_arg(_Visitor&& __vis, basic_ __libcpp_unreachable(); } -# if _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_EXPLICIT_THIS_PARAMETER) - -template <class _Rp, class _Visitor, class _Context> -_LIBCPP_HIDE_FROM_ABI _Rp __visit_format_arg(_Visitor&& __vis, basic_format_arg<_Context> __arg) { - switch (__arg.__type_) { - case __format::__arg_t::__none: - return std::invoke_r<_Rp>(std::forward<_Visitor>(__vis), __arg.__value_.__monostate_); - case __format::__arg_t::__boolean: - return std::invoke_r<_Rp>(std::forward<_Visitor>(__vis), __arg.__value_.__boolean_); - case __format::__arg_t::__char_type: - return std::invoke_r<_Rp>(std::forward<_Visitor>(__vis), __arg.__value_.__char_type_); - case __format::__arg_t::__int: - return std::invoke_r<_Rp>(std::forward<_Visitor>(__vis), __arg.__value_.__int_); - case __format::__arg_t::__long_long: - return std::invoke_r<_Rp>(std::forward<_Visitor>(__vis), __arg.__value_.__long_long_); - case __format::__arg_t::__i128: -# ifndef _LIBCPP_HAS_NO_INT128 - return std::invoke_r<_Rp>(std::forward<_Visitor>(__vis), __arg.__value_.__i128_); -# else - __libcpp_unreachable(); -# endif - case __format::__arg_t::__unsigned: - return std::invoke_r<_Rp>(std::forward<_Visitor>(__vis), __arg.__value_.__unsigned_); - case __format::__arg_t::__unsigned_long_long: - return std::invoke_r<_Rp>(std::forward<_Visitor>(__vis), __arg.__value_.__unsigned_long_long_); - case __format::__arg_t::__u128: -# ifndef _LIBCPP_HAS_NO_INT128 - return std::invoke_r<_Rp>(std::forward<_Visitor>(__vis), __arg.__value_.__u128_); -# else - __libcpp_unreachable(); -# endif - case __format::__arg_t::__float: - return std::invoke_r<_Rp>(std::forward<_Visitor>(__vis), __arg.__value_.__float_); - case __format::__arg_t::__double: - return std::invoke_r<_Rp>(std::forward<_Visitor>(__vis), __arg.__value_.__double_); - case __format::__arg_t::__long_double: - return std::invoke_r<_Rp>(std::forward<_Visitor>(__vis), __arg.__value_.__long_double_); - case __format::__arg_t::__const_char_type_ptr: - return std::invoke_r<_Rp>(std::forward<_Visitor>(__vis), __arg.__value_.__const_char_type_ptr_); - case __format::__arg_t::__string_view: - return std::invoke_r<_Rp>(std::forward<_Visitor>(__vis), __arg.__value_.__string_view_); - case __format::__arg_t::__ptr: - return std::invoke_r<_Rp>(std::forward<_Visitor>(__vis), __arg.__value_.__ptr_); - case __format::__arg_t::__handle: - return std::invoke_r<_Rp>( - std::forward<_Visitor>(__vis), typename basic_format_arg<_Context>::handle{__arg.__value_.__handle_}); - } - - __libcpp_unreachable(); -} - -# endif // _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_EXPLICIT_THIS_PARAMETER) - /// Contains the values used in basic_format_arg. /// /// This is a separate type so it's possible to store the values and types in @@ -280,52 +227,6 @@ public: _LIBCPP_HIDE_FROM_ABI explicit operator bool() const noexcept { return __type_ != __format::__arg_t::__none; } -# if _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_EXPLICIT_THIS_PARAMETER) - - // This function is user facing, so it must wrap the non-standard types of - // the "variant" in a handle to stay conforming. See __arg_t for more details. - template <class _Visitor> - _LIBCPP_HIDE_FROM_ABI decltype(auto) visit(this basic_format_arg __arg, _Visitor&& __vis) { - switch (__arg.__type_) { -# ifndef _LIBCPP_HAS_NO_INT128 - case __format::__arg_t::__i128: { - typename __basic_format_arg_value<_Context>::__handle __h{__arg.__value_.__i128_}; - return std::invoke(std::forward<_Visitor>(__vis), typename basic_format_arg<_Context>::handle{__h}); - } - - case __format::__arg_t::__u128: { - typename __basic_format_arg_value<_Context>::__handle __h{__arg.__value_.__u128_}; - return std::invoke(std::forward<_Visitor>(__vis), typename basic_format_arg<_Context>::handle{__h}); - } -# endif - default: - return std::__visit_format_arg(std::forward<_Visitor>(__vis), __arg); - } - } - - // This function is user facing, so it must wrap the non-standard types of - // the "variant" in a handle to stay conforming. See __arg_t for more details. - template <class _Rp, class _Visitor> - _LIBCPP_HIDE_FROM_ABI _Rp visit(this basic_format_arg __arg, _Visitor&& __vis) { - switch (__arg.__type_) { -# ifndef _LIBCPP_HAS_NO_INT128 - case __format::__arg_t::__i128: { - typename __basic_format_arg_value<_Context>::__handle __h{__arg.__value_.__i128_}; - return std::invoke_r<_Rp>(std::forward<_Visitor>(__vis), typename basic_format_arg<_Context>::handle{__h}); - } - - case __format::__arg_t::__u128: { - typename __basic_format_arg_value<_Context>::__handle __h{__arg.__value_.__u128_}; - return std::invoke_r<_Rp>(std::forward<_Visitor>(__vis), typename basic_format_arg<_Context>::handle{__h}); - } -# endif - default: - return std::__visit_format_arg<_Rp>(std::forward<_Visitor>(__vis), __arg); - } - } - -# endif // _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_EXPLICIT_THIS_PARAMETER) - private: using char_type = typename _Context::char_type; @@ -366,11 +267,7 @@ private: // This function is user facing, so it must wrap the non-standard types of // the "variant" in a handle to stay conforming. See __arg_t for more details. template <class _Visitor, class _Context> -# if _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_EXPLICIT_THIS_PARAMETER) -_LIBCPP_DEPRECATED_IN_CXX26 -# endif - _LIBCPP_HIDE_FROM_ABI decltype(auto) - visit_format_arg(_Visitor&& __vis, basic_format_arg<_Context> __arg) { +_LIBCPP_HIDE_FROM_ABI decltype(auto) visit_format_arg(_Visitor&& __vis, basic_format_arg<_Context> __arg) { switch (__arg.__type_) { # ifndef _LIBCPP_HAS_NO_INT128 case __format::__arg_t::__i128: { @@ -382,7 +279,7 @@ _LIBCPP_DEPRECATED_IN_CXX26 typename __basic_format_arg_value<_Context>::__handle __h{__arg.__value_.__u128_}; return std::invoke(std::forward<_Visitor>(__vis), typename basic_format_arg<_Context>::handle{__h}); } -# endif // _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_EXPLICIT_THIS_PARAMETER) +# endif default: return std::__visit_format_arg(std::forward<_Visitor>(__vis), __arg); } diff --git a/libcxx/include/__format/format_context.h b/libcxx/include/__format/format_context.h index 0beaa84..5b252b8 100644 --- a/libcxx/include/__format/format_context.h +++ b/libcxx/include/__format/format_context.h @@ -163,25 +163,20 @@ public: # endif __ctx_(std::addressof(__ctx)), __arg_([](void* __c, size_t __id) { - auto __visitor = [&](auto __arg) -> basic_format_arg<basic_format_context> { - if constexpr (same_as<decltype(__arg), monostate>) - return {}; - else if constexpr (same_as<decltype(__arg), typename basic_format_arg<_Context>::handle>) - // At the moment it's not possible for formatting to use a re-targeted handle. - // TODO FMT add this when support is needed. - std::__throw_format_error("Re-targeting handle not supported"); - else - return basic_format_arg<basic_format_context>{ - __format::__determine_arg_t<basic_format_context, decltype(__arg)>(), - __basic_format_arg_value<basic_format_context>(__arg)}; - }; -# if _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_EXPLICIT_THIS_PARAMETER) - return static_cast<_Context*>(__c)->arg(__id).visit(std::move(__visitor)); -# else - _LIBCPP_SUPPRESS_DEPRECATED_PUSH - return std::visit_format_arg(std::move(__visitor), static_cast<_Context*>(__c)->arg(__id)); - _LIBCPP_SUPPRESS_DEPRECATED_POP -# endif // _LIBCPP_STD_VER >= 26 && defined(_LIBCPP_HAS_EXPLICIT_THIS_PARAMETER) + return std::visit_format_arg( + [&](auto __arg) -> basic_format_arg<basic_format_context> { + if constexpr (same_as<decltype(__arg), monostate>) + return {}; + else if constexpr (same_as<decltype(__arg), typename basic_format_arg<_Context>::handle>) + // At the moment it's not possible for formatting to use a re-targeted handle. + // TODO FMT add this when support is needed. + std::__throw_format_error("Re-targeting handle not supported"); + else + return basic_format_arg<basic_format_context>{ + __format::__determine_arg_t<basic_format_context, decltype(__arg)>(), + __basic_format_arg_value<basic_format_context>(__arg)}; + }, + static_cast<_Context*>(__c)->arg(__id)); }) { } |