|  | //===----------------------------------------------------------------------===// | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef SUPPORT_TEST_STRING_LITERAL_H | 
|  | #define SUPPORT_TEST_STRING_LITERAL_H | 
|  |  | 
|  | #include "test_macros.h" | 
|  |  | 
|  | #include <algorithm> | 
|  | #include <concepts> | 
|  | #include <string_view> | 
|  |  | 
|  | #if TEST_STD_VER > 17 | 
|  |  | 
|  | /// Helper class to "transfer" a string literal | 
|  | /// | 
|  | /// The MAKE_STRING helper macros turn a string literal into a const char*. | 
|  | /// This is an issue when testing std::format; its format-string needs a string | 
|  | /// literal for compile-time validation. This class does the job. | 
|  | /// | 
|  | /// \note The class assumes a wchar_t can be initialized from a char. | 
|  | /// \note All members are public to avoid compilation errors. | 
|  | template <std::size_t N> | 
|  | struct string_literal { | 
|  | consteval /*implicit*/ string_literal(const char (&str)[N + 1]) { | 
|  | std::copy_n(str, N + 1, data_); | 
|  | #  ifndef TEST_HAS_NO_WIDE_CHARACTERS | 
|  | std::copy_n(str, N + 1, wdata_); | 
|  | #  endif | 
|  | } | 
|  |  | 
|  | template <class CharT> | 
|  | consteval std::basic_string_view<CharT> sv() const { | 
|  | if constexpr (std::same_as<CharT, char>) | 
|  | return std::basic_string_view{data_}; | 
|  | #  ifndef TEST_HAS_NO_WIDE_CHARACTERS | 
|  | else | 
|  | return std::basic_string_view{wdata_}; | 
|  | #  endif | 
|  | } | 
|  |  | 
|  | char data_[N + 1]; | 
|  | #  ifndef TEST_HAS_NO_WIDE_CHARACTERS | 
|  | wchar_t wdata_[N + 1]; | 
|  | #  endif | 
|  | }; | 
|  |  | 
|  | template <std::size_t N> | 
|  | string_literal(const char (&str)[N]) -> string_literal<N - 1>; | 
|  |  | 
|  | #endif // TEST_STD_VER > 17 | 
|  |  | 
|  | #endif // SUPPORT_TEST_STRING_LITERAL_H |