format: recognise specifiers for char*, size_t
This commit is contained in:
parent
7092e45d7a
commit
7ccad71e6e
41
format.ipp
41
format.ipp
@ -28,6 +28,41 @@
|
|||||||
|
|
||||||
namespace util {
|
namespace util {
|
||||||
namespace detail { namespace format {
|
namespace detail { namespace format {
|
||||||
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
template <typename T>
|
||||||
|
inline bool
|
||||||
|
is_valid_specifier (const char*)
|
||||||
|
{ return false; }
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
template <>
|
||||||
|
inline bool
|
||||||
|
is_valid_specifier<const char*> (const char *s)
|
||||||
|
{ return *s == 's'; }
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
template <>
|
||||||
|
inline bool
|
||||||
|
is_valid_specifier<char*> (const char *s)
|
||||||
|
{ return *s == 's'; }
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
template <>
|
||||||
|
inline bool
|
||||||
|
is_valid_specifier<std::string> (const char *s)
|
||||||
|
{ return *s == 's'; }
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
template <>
|
||||||
|
inline bool
|
||||||
|
is_valid_specifier<size_t> (const char *s)
|
||||||
|
{ return *s == 'u'; }
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////
|
||||||
template <typename InputIt>
|
template <typename InputIt>
|
||||||
void
|
void
|
||||||
render (InputIt first,
|
render (InputIt first,
|
||||||
@ -42,6 +77,7 @@ namespace util {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------
|
||||||
template <typename InputIt,
|
template <typename InputIt,
|
||||||
typename ValueT,
|
typename ValueT,
|
||||||
typename ...Args>
|
typename ...Args>
|
||||||
@ -65,8 +101,8 @@ namespace util {
|
|||||||
if (spec == last)
|
if (spec == last)
|
||||||
throw util::format::format_error ("missing format specifier");
|
throw util::format::format_error ("missing format specifier");
|
||||||
|
|
||||||
if (*spec != 's')
|
if (!is_valid_specifier<typename std::decay<ValueT>::type> (&*spec))
|
||||||
throw util::format::format_error ("unhandled format specifier");
|
throw util::format::format_error ("invalid/unhandled format specifier");
|
||||||
|
|
||||||
dest << val;
|
dest << val;
|
||||||
|
|
||||||
@ -74,6 +110,7 @@ namespace util {
|
|||||||
}
|
}
|
||||||
} }
|
} }
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
namespace format {
|
namespace format {
|
||||||
template <typename ...Args>
|
template <typename ...Args>
|
||||||
std::string
|
std::string
|
||||||
|
Loading…
Reference in New Issue
Block a user