#include <cstring>
#include <string>
#include <utility>
#include <wpi/detail/meta/cpp_future.h>
#include <wpi/detail/meta/detected.h>
Go to the source code of this file.
|  | 
| namespace | detail | 
|  | detail namespace with internal helper functions 
 | 
|  | 
|  | 
| template<typename StringType , typename Arg > | 
| using | detail::string_can_append = decltype(std::declval<StringType&>().append(std::declval < Arg && > ())) | 
|  | 
| template<typename StringType , typename Arg > | 
| using | detail::detect_string_can_append = is_detected<string_can_append, StringType, Arg> | 
|  | 
| template<typename StringType , typename Arg > | 
| using | detail::string_can_append_op = decltype(std::declval<StringType&>() += std::declval < Arg && > ()) | 
|  | 
| template<typename StringType , typename Arg > | 
| using | detail::detect_string_can_append_op = is_detected<string_can_append_op, StringType, Arg> | 
|  | 
| template<typename StringType , typename Arg > | 
| using | detail::string_can_append_iter = decltype(std::declval<StringType&>().append(std::declval<const Arg&>().begin(), std::declval<const Arg&>().end())) | 
|  | 
| template<typename StringType , typename Arg > | 
| using | detail::detect_string_can_append_iter = is_detected<string_can_append_iter, StringType, Arg> | 
|  | 
| template<typename StringType , typename Arg > | 
| using | detail::string_can_append_data = decltype(std::declval<StringType&>().append(std::declval<const Arg&>().data(), std::declval<const Arg&>().size())) | 
|  | 
| template<typename StringType , typename Arg > | 
| using | detail::detect_string_can_append_data = is_detected<string_can_append_data, StringType, Arg> | 
|  | 
|  | 
| std::size_t | detail::concat_length () | 
|  | 
| template<typename... Args> | 
| std::size_t | detail::concat_length (const char *cstr, const Args &... rest) | 
|  | 
| template<typename StringType , typename... Args> | 
| std::size_t | detail::concat_length (const StringType &str, const Args &... rest) | 
|  | 
| template<typename... Args> | 
| std::size_t | detail::concat_length (const char, const Args &... rest) | 
|  | 
| template<typename OutStringType > | 
| void | detail::concat_into (OutStringType &) | 
|  | 
| template<typename OutStringType , typename Arg , typename... Args, enable_if_t< !detect_string_can_append< OutStringType, Arg >::value &&detect_string_can_append_op< OutStringType, Arg >::value, int >  = 0> | 
| void | detail::concat_into (OutStringType &out, Arg &&arg, Args &&... rest) | 
|  | 
| template<typename OutStringType , typename Arg , typename... Args, enable_if_t< !detect_string_can_append< OutStringType, Arg >::value &&!detect_string_can_append_op< OutStringType, Arg >::value &&detect_string_can_append_iter< OutStringType, Arg >::value, int >  = 0> | 
| void | detail::concat_into (OutStringType &out, const Arg &arg, Args &&... rest) | 
|  | 
| template<typename OutStringType  = std::string, typename... Args> | 
| OutStringType | detail::concat (Args &&... args) | 
|  |