xref: /llvm-project/libcxx/test/support/test_basic_format_arg.h (revision 6a54dfbfe534276d644d7f9c027f0deeb748dd53)
10922ce56SMark de Wever //===----------------------------------------------------------------------===//
2*6a54dfbfSLouis Dionne //
30922ce56SMark de Wever // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40922ce56SMark de Wever // See https://llvm.org/LICENSE.txt for license information.
50922ce56SMark de Wever // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60922ce56SMark de Wever //
70922ce56SMark de Wever //===----------------------------------------------------------------------===//
80922ce56SMark de Wever 
90922ce56SMark de Wever #include <concepts>
100922ce56SMark de Wever #include <format>
1127e67cdbSHristo Hristov #include <utility>
120922ce56SMark de Wever 
130922ce56SMark de Wever #include "test_macros.h"
140922ce56SMark de Wever 
150922ce56SMark de Wever /// Returns whether the basic_format_arg contains a type T with the expected value.
160922ce56SMark de Wever template <class Context, class T>
170922ce56SMark de Wever bool test_basic_format_arg(std::basic_format_arg<Context> arg, T expected) {
1827e67cdbSHristo Hristov   auto visitor = [expected](auto a) {
190922ce56SMark de Wever     if constexpr (std::same_as<decltype(a), T>)
200922ce56SMark de Wever       return a == expected;
210922ce56SMark de Wever     else
220922ce56SMark de Wever       return false;
2327e67cdbSHristo Hristov   };
2427e67cdbSHristo Hristov #if TEST_STD_VER >= 26 && defined(TEST_HAS_EXPLICIT_THIS_PARAMETER)
2527e67cdbSHristo Hristov   return arg.visit(std::move(visitor));
2627e67cdbSHristo Hristov #else
2727e67cdbSHristo Hristov   return std::visit_format_arg(std::move(visitor), arg);
2827e67cdbSHristo Hristov #endif
290922ce56SMark de Wever }
30