#include <string>
#include <sstream>
#include <iostream>

template <class Number> 
std::string& operator<<(std::string& s, Number a) {
    return s += std::to_string(a);
}
std::string& operator<<(std::string& s, const char* a) {
    return s += a;
}
std::string& operator<<(std::string& s, const std::string &a) {
    return s += a;
}
int main() {
    std::string s;
    // this prints out: "inserting text and a number(1)"
    std::cout << (s << "inserting text and a number (" << 1 << ")\n");

    // normal way
    std::ostringstream os; 
    os << "inserting text and a number (" << 1 << ")\n";
    std::cout << os.str();
}