15 template <std::
size_t N>
20 template <std::
size_t N>
25 template <std::
size_t N>
30 template <std::
size_t N>
35 template <
typename... Ts>
38 std::is_same_v<Ts, char>)&&...);
40 template <
typename... Ts>
41 [[nodiscard]]
auto concat(
const Ts&... xs)
45 thread_local std::ostringstream oss;
52 template <std::
size_t N>
53 [[nodiscard]] constexpr
inline std::size_t
getSize(
char (&)[N]) noexcept
58 template <std::
size_t N>
59 [[nodiscard]] constexpr
inline std::size_t
getSize(
const char (&)[N]) noexcept
64 [[nodiscard]] constexpr
inline std::size_t
getSize(
const char* s) noexcept
71 [[nodiscard]] constexpr
inline std::size_t
getSize(
const char&) noexcept {
return 1; }
73 [[nodiscard]]
inline std::size_t
getSize(
const std::string& s) noexcept {
return s.size(); }
75 [[nodiscard]] constexpr
inline std::size_t
getSize(
const std::string_view& s) noexcept
80 template <
typename... Ts>
84 const std::size_t space = (1 + ... +
getSize(xs));
85 result.reserve(result.size() + space);
86 ((result += xs), ...);
89 template <
typename... Ts>
90 [[nodiscard]]
auto concat(
const Ts&... xs)
99 template <
typename Sep,
typename First,
typename... Rest>
100 [[nodiscard]]
auto concat(Sep sep,
const First& first,
const Rest&... rest)
105 ((result += sep, result += rest), ...);
110 template <
typename Sep,
typename First,
typename... Rest>
111 [[nodiscard]]
auto concat(Sep sep,
const First& first,
const Rest&... rest)
115 thread_local std::ostringstream oss;
118 ((oss << sep << rest), ...);
Definition: cluster_descriptor.hpp:13
auto concatInto(std::string &result, const Ts &... xs) -> std::enable_if_t< AllConvertibleToStringView< Ts... >, void >
Definition: concat.hpp:81
constexpr bool AllConvertibleToStringView
Definition: concat.hpp:36
auto concat(const Ts &... xs) -> std::enable_if_t<!AllConvertibleToStringView< Ts... >, std::string >
Definition: concat.hpp:41
constexpr std::size_t getSize(char(&)[N]) noexcept
Definition: concat.hpp:53
bool_constant< false > false_type
Definition: integral_constant.hpp:63
typename std::enable_if< B, T >::type enable_if_t
Definition: enable_if.hpp:27
bool_constant< true > true_type
Definition: integral_constant.hpp:62
Definition: concat.hpp:12