27template<
typename... Args>
 
   28inline std::size_t 
concat_length(
const char* cstr, 
const Args& ... rest);
 
   30template<
typename StringType, 
typename... Args>
 
   31inline std::size_t 
concat_length(
const StringType& str, 
const Args& ... rest);
 
   33template<
typename... Args>
 
   39template<
typename... Args>
 
   46template<
typename StringType, 
typename... Args>
 
   47inline std::size_t 
concat_length(
const StringType& str, 
const Args& ... rest)
 
 
   52template<
typename OutStringType>
 
   56template<
typename StringType, 
typename Arg>
 
   57using string_can_append = 
decltype(std::declval<StringType&>().append(std::declval < Arg && > ()));
 
   59template<
typename StringType, 
typename Arg>
 
   62template<
typename StringType, 
typename Arg>
 
   65template<
typename StringType, 
typename Arg>
 
   68template<
typename StringType, 
typename Arg>
 
   69using string_can_append_iter = 
decltype(std::declval<StringType&>().append(std::declval<const Arg&>().begin(), std::declval<const Arg&>().end()));
 
   71template<
typename StringType, 
typename Arg>
 
   74template<
typename StringType, 
typename Arg>
 
   75using string_can_append_data = 
decltype(std::declval<StringType&>().append(std::declval<const Arg&>().data(), std::declval<const Arg&>().size()));
 
   77template<
typename StringType, 
typename Arg>
 
   80template < 
typename OutStringType, 
typename Arg, 
typename... Args,
 
   81           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
 
   83inline void concat_into(OutStringType& out, Arg && 
arg, Args && ... rest);
 
   85template < 
typename OutStringType, 
typename Arg, 
typename... Args,
 
   86           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
 
   89inline void concat_into(OutStringType& out, 
const Arg& 
arg, Args && ... rest);
 
   91template < 
typename OutStringType, 
typename Arg, 
typename... Args,
 
   92           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
 
   96inline void concat_into(OutStringType& out, 
const Arg& 
arg, Args && ... rest);
 
   98template<
typename OutStringType, 
typename Arg, 
typename... Args,
 
  102    out.append(std::forward<Arg>(
arg));
 
 
  106template < 
typename OutStringType, 
typename Arg, 
typename... Args,
 
  107           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
 
  108                         && detect_string_can_append_op<OutStringType, Arg>::value, 
int > >
 
  109inline void concat_into(OutStringType& out, Arg&& 
arg, Args&& ... rest)
 
  111    out += std::forward<Arg>(
arg);
 
  115template < 
typename OutStringType, 
typename Arg, 
typename... Args,
 
  116           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
 
  117                         && !detect_string_can_append_op<OutStringType, Arg>::value
 
  118                         && detect_string_can_append_iter<OutStringType, Arg>::value, 
int > >
 
  121    out.append(
arg.begin(), 
arg.end());
 
 
  125template < 
typename OutStringType, 
typename Arg, 
typename... Args,
 
  126           enable_if_t < !detect_string_can_append<OutStringType, Arg>::value
 
  127                         && !detect_string_can_append_op<OutStringType, Arg>::value
 
  128                         && !detect_string_can_append_iter<OutStringType, Arg>::value
 
  129                         && detect_string_can_append_data<OutStringType, Arg>::value, 
int > >
 
  130inline void concat_into(OutStringType& out, 
const Arg& 
arg, Args&& ... rest)
 
  132    out.append(
arg.data(), 
arg.size());
 
  136template<
typename OutStringType = std::string, 
typename... Args>
 
  137inline OutStringType 
concat(Args && ... args)
 
 
#define WPI_JSON_NAMESPACE_END
Definition abi_macros.h:59
#define WPI_JSON_NAMESPACE_BEGIN
Definition abi_macros.h:53
detail namespace with internal helper functions
Definition input_adapters.h:32
decltype(std::declval< StringType & >().append(std::declval< Arg && >())) string_can_append
Definition string_concat.h:57
is_detected< string_can_append_data, StringType, Arg > detect_string_can_append_data
Definition string_concat.h:78
OutStringType concat(Args &&... args)
Definition string_concat.h:137
is_detected< string_can_append, StringType, Arg > detect_string_can_append
Definition string_concat.h:60
typename std::enable_if< B, T >::type enable_if_t
Definition cpp_future.h:38
typename detector< nonesuch, void, Op, Args... >::value_t is_detected
Definition detected.h:48
is_detected< string_can_append_iter, StringType, Arg > detect_string_can_append_iter
Definition string_concat.h:72
void concat_into(OutStringType &)
Definition string_concat.h:53
std::size_t concat_length()
Definition string_concat.h:22
decltype(std::declval< StringType & >().append(std::declval< const Arg & >().begin(), std::declval< const Arg & >().end())) string_can_append_iter
Definition string_concat.h:69
decltype(std::declval< StringType & >().append(std::declval< const Arg & >().data(), std::declval< const Arg & >().size())) string_can_append_data
Definition string_concat.h:75
is_detected< string_can_append_op, StringType, Arg > detect_string_can_append_op
Definition string_concat.h:66
decltype(std::declval< StringType & >()+=std::declval< Arg && >()) string_can_append_op
Definition string_concat.h:63
auto arg(const Char *name, const T &arg) -> detail::named_arg< Char, T >
Returns a named argument to be used in a formatting function.
Definition base.h:2775