WPILibC++ 2024.1.1-beta-4
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, Args &&... rest)
 
template<typename StringType , typename... Args>
std::size_t detail::concat_length (const StringType &str, Args &&... rest)
 
template<typename... Args>
std::size_t detail::concat_length (const char, 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)