aboutsummaryrefslogtreecommitdiff
path: root/libcxx/include/__format
diff options
context:
space:
mode:
authorPetr Hosek <phosek@google.com>2024-01-22 16:55:12 +0000
committerPetr Hosek <phosek@google.com>2024-01-22 17:23:05 +0000
commit02f95b77515fe18ed1076b94cbb850ea0cf3c77e (patch)
treebed373719b86f3ce17dce7e6909615387aadb6ae /libcxx/include/__format
parented760d170f18b3ca9f53f4e4a2e31d82bf0ba3e7 (diff)
downloadllvm-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.h109
-rw-r--r--libcxx/include/__format/format_context.h33
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));
}) {
}