| // { dg-do compile { target c++23 } } |
| |
| #include <format> |
| #include <string> |
| |
| template<typename CharT> |
| struct MyTraits : std::char_traits<CharT> |
| {}; |
| |
| template<typename CharT> |
| struct MyAlloc : std::allocator<CharT> |
| { |
| using std::allocator<CharT>::allocator; |
| }; |
| |
| template<typename CharT> |
| void testCharacters() |
| { |
| static_assert(std::enable_nonlocking_formatter_optimization< |
| CharT>); |
| static_assert(std::enable_nonlocking_formatter_optimization< |
| CharT*>); |
| static_assert(std::enable_nonlocking_formatter_optimization< |
| const CharT*>); |
| static_assert(std::enable_nonlocking_formatter_optimization< |
| CharT[5]>); |
| |
| static_assert(std::enable_nonlocking_formatter_optimization< |
| std::basic_string<CharT>>); |
| static_assert(std::enable_nonlocking_formatter_optimization< |
| std::basic_string<CharT, MyTraits<CharT>>>); |
| static_assert(std::enable_nonlocking_formatter_optimization< |
| std::basic_string<CharT, MyTraits<CharT>, MyAlloc<CharT>>>); |
| |
| static_assert(std::enable_nonlocking_formatter_optimization< |
| std::basic_string_view<CharT>>); |
| static_assert(std::enable_nonlocking_formatter_optimization< |
| std::basic_string_view<CharT, MyTraits<CharT>>>); |
| } |
| |
| void testAll() |
| { |
| static_assert(std::enable_nonlocking_formatter_optimization< |
| int>); |
| static_assert(std::enable_nonlocking_formatter_optimization< |
| float>); |
| static_assert(std::enable_nonlocking_formatter_optimization< |
| void*>); |
| static_assert(std::enable_nonlocking_formatter_optimization< |
| const void*>); |
| static_assert(std::enable_nonlocking_formatter_optimization< |
| std::nullptr_t>); |
| |
| testCharacters<char>(); |
| #ifdef _GLIBCXX_USE_WCHAR_T |
| testCharacters<wchar_t>(); |
| #endif // USE_WCHAR_T |
| } |
| |