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