#include <iostream>
#include <string>
#include <type_traits>
template <typename T>
void append(std::string& str, T with) {
// Жесткая проверка типа на этапе компиляции
static_assert(std::is_arithmetic_v<T> || std::is_convertible_v<T, std::string>,
"Ошибка: Тип должен быть числом или строкой!");
if constexpr (std::is_convertible_v<T, std::string>) {
str += with;
} else {
str += std::to_string(with);
}
}
int main()
{
std::string t = "";
append(t, "Hello ");
append(t, "World!");
append(t, 98L);
std::cout << t << std::endl;
return 0;
}