blob: a726e9d74ceec88ac47c2f32027ccc6a81e6d2cb [file] [log] [blame]
// { 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
}