[format.formattable] (original) (raw)

template<class T, class Context,class Formatter = typename Context::template formatter_type<remove_const_t<T>>> concept formattable-with = semiregular<Formatter> && requires(Formatter& f, const Formatter& cf, T&& t, Context fc, basic_format_parse_context<typename Context::char_type> pc) { { f.parse(pc) } -> same_as<typename decltype(pc)::iterator>;{ cf.format(t, fc) } -> same_as<typename Context::iterator>;};template<class T, class charT> concept formattable = formattable-with<remove_reference_t<T>, basic_format_context<_fmt-iter-for_<charT>, charT>>;

A type T and a character type charTmodel formattableif formatter<remove_cvref_t<T>, charT> meets the BasicFormatter requirements ([formatter.requirements]) and, if remove_reference_t<T> is const-qualified, the Formatter requirements.