1eb6e13cbSMark de Wever //===----------------------------------------------------------------------===// 2*6a54dfbfSLouis Dionne // 3eb6e13cbSMark de Wever // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4eb6e13cbSMark de Wever // See https://llvm.org/LICENSE.txt for license information. 5eb6e13cbSMark de Wever // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6eb6e13cbSMark de Wever // 7eb6e13cbSMark de Wever //===----------------------------------------------------------------------===// 8eb6e13cbSMark de Wever 9eb6e13cbSMark de Wever // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20 10eb6e13cbSMark de Wever 11520c7fbbSLouis Dionne // UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME 12af5fc4b4SMark de Wever 13eb6e13cbSMark de Wever // <format> 14eb6e13cbSMark de Wever 15eb6e13cbSMark de Wever // template<class charT, formattable<charT>... Ts> 16eb6e13cbSMark de Wever // struct formatter<pair-or-tuple<Ts...>, charT> 17eb6e13cbSMark de Wever 18eb6e13cbSMark de Wever // constexpr void constexpr void set_brackets(basic_string_view<charT> opening, 19f68a536aSMark de Wever // basic_string_view<charT> closing) noexcept; 20eb6e13cbSMark de Wever 21eb6e13cbSMark de Wever // Note this tests the basics of this function. It's tested in more detail in 22eb6e13cbSMark de Wever // the format functions tests. 23eb6e13cbSMark de Wever 24eb6e13cbSMark de Wever #include <format> 25eb6e13cbSMark de Wever #include <tuple> 26eb6e13cbSMark de Wever #include <utility> 27eb6e13cbSMark de Wever 28eb6e13cbSMark de Wever #include "make_string.h" 29eb6e13cbSMark de Wever 30eb6e13cbSMark de Wever #define SV(S) MAKE_STRING_VIEW(CharT, S) 31eb6e13cbSMark de Wever 32eb6e13cbSMark de Wever template <class CharT, class Arg> 33eb6e13cbSMark de Wever constexpr void test() { 34eb6e13cbSMark de Wever std::formatter<Arg, CharT> formatter; 35eb6e13cbSMark de Wever formatter.set_brackets(SV("open"), SV("close")); 36f68a536aSMark de Wever // Note the SV macro may throw, so can't use it. 37f68a536aSMark de Wever static_assert(noexcept(formatter.set_brackets(std::basic_string_view<CharT>{}, std::basic_string_view<CharT>{}))); 38eb6e13cbSMark de Wever 39eb6e13cbSMark de Wever // Note there is no direct way to validate this function modified the object. 40eb6e13cbSMark de Wever } 41eb6e13cbSMark de Wever 42eb6e13cbSMark de Wever template <class CharT> 43eb6e13cbSMark de Wever constexpr void test() { 44eb6e13cbSMark de Wever test<CharT, std::tuple<int>>(); 45eb6e13cbSMark de Wever test<CharT, std::tuple<int, CharT>>(); 46eb6e13cbSMark de Wever test<CharT, std::pair<int, CharT>>(); 473d334df5SLouis Dionne test<CharT, std::tuple<int, CharT, bool>>(); 48eb6e13cbSMark de Wever } 49eb6e13cbSMark de Wever 50eb6e13cbSMark de Wever constexpr bool test() { 51eb6e13cbSMark de Wever test<char>(); 52eb6e13cbSMark de Wever #ifndef TEST_HAS_NO_WIDE_CHARACTERS 53eb6e13cbSMark de Wever test<wchar_t>(); 54eb6e13cbSMark de Wever #endif 55eb6e13cbSMark de Wever 56eb6e13cbSMark de Wever return true; 57eb6e13cbSMark de Wever } 58eb6e13cbSMark de Wever 59eb6e13cbSMark de Wever int main(int, char**) { 60eb6e13cbSMark de Wever test(); 61eb6e13cbSMark de Wever static_assert(test()); 62eb6e13cbSMark de Wever 63eb6e13cbSMark de Wever return 0; 64eb6e13cbSMark de Wever } 65