WPILibC++ 2025.2.1
Loading...
Searching...
No Matches
string_concat.h File Reference
#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.

Namespaces

namespace  detail
 detail namespace with internal helper functions
 

Typedefs

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>
 

Functions

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)