blob: 1358fc1105217949f858cf7c4bea594f52bb660e [file] [log] [blame]
// { dg-do compile { target c++23 } }
#include <format>
#include <utility>
struct MyPair
{
int x;
int y;
};
template<typename CharT>
struct std::formatter<MyPair, CharT>
{
template<typename ParseContext>
auto parse(ParseContext& pc)
{ return _formatter.parse(pc); }
template<typename FormatContext>
auto format(const MyPair& mp, FormatContext& fc) const
{ return _formatter.format(std::make_pair(mp.x, mp.y), fc); }
private:
std::formatter<std::pair<int, int>, CharT> _formatter;
};
static_assert(std::formattable<MyPair, char>);
static_assert(std::formattable<MyPair, wchar_t>);
struct MyRange
{
int* begin;
int* end;
};
template<typename CharT>
struct std::formatter<MyRange, CharT>
{
template<typename ParseContext>
auto parse(ParseContext& pc)
{ return _formatter.parse(pc); }
template<typename FormatContext>
auto format(const MyRange& mp, FormatContext& fc) const
{ return _formatter.format(std::span<int>(mp.begin, mp.end), fc); }
private:
std::formatter<std::span<int>, CharT> _formatter;
};
static_assert(std::formattable<MyRange, char>);
static_assert(std::formattable<MyRange, wchar_t>);