#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; }