9#ifndef INCLUDED_BSLFMT_FORMATTABLE
10#define INCLUDED_BSLFMT_FORMATTABLE
161#include <bslscm_version.h>
168#ifdef BSLS_COMPILERFEATURES_SUPPORT_CONCEPTS
169# define BSL_FORMATTABLE_DEFINED 1
172# ifdef BSLS_LIBRARYFEATURES_HAS_CPP23_RANGE_FORMAT
175 using std::formattable;
180# include <type_traits>
200template <
class t_CHAR>
201class Formattable_DummyOutputIterator {
203 using difference_type = ptrdiff_t;
206 Formattable_DummyOutputIterator&
operator++();
207 Formattable_DummyOutputIterator
operator++(
int);
217 std::output_iterator<Formattable_DummyOutputIterator<char>,
char>);
219 std::output_iterator<Formattable_DummyOutputIterator<wchar_t>,
wchar_t>);
232template <
class t_TYPE,
235 typename t_CONTEXT::template
236 formatter_type<std::remove_const_t<t_TYPE>> >
237concept Formattable_With =
238 std::semiregular<t_FORMATTER> &&
239 requires (t_FORMATTER& f,
const t_FORMATTER& cf, t_TYPE&& t, t_CONTEXT fc,
240 bsl::basic_format_parse_context<
241 typename t_CONTEXT::char_type
243 { f.parse(pc) } -> std::same_as<
typename decltype(pc)::iterator>;
244 { cf.format(t, fc) } -> std::same_as<typename t_CONTEXT::iterator>;
260template <
class t_TYPE,
class t_CHAR>
261concept formattable = BloombergLP::bslfmt::Formattable_With<
262 std::remove_reference_t<t_TYPE>,
263 bsl::basic_format_context<
264 BloombergLP::bslfmt::Formattable_DummyOutputIterator<t_CHAR>,
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
FunctionOutputIterator< FUNCTION > & operator++(FunctionOutputIterator< FUNCTION > &iterator)
Do nothing and return specified iterator.
Definition bdlb_functionoutputiterator.h:408
Decimal32 operator*(Decimal32 lhs, Decimal32 rhs)
Definition bdlat_valuetypefunctions.h:939
Definition bslfmt_enablestreamedformatter.h:130