#include <iostream>
#include <string>

void print(const int& value) {
    std::cout << value << std::endl;
}

void print(const float& value) {
    std::cout << value << std::endl;
}

void print(const std::string& value) {
    std::cout << value << std::endl;
}

template<typename T>
void prinT(const T& t) {
    std::cout << t << std::endl;
}

struct Thing {
    int x{110};
};

std::ostream& operator<<(std::ostream& os, const Thing& t) {
    os << t.x;
    return os;
}


int main() {
    print(42);
    print("forty two");
    print(44.0f);
    prinT("kabouki");
    prinT('G');
    prinT(false);
    int var{9};
    print(var);
    Thing x;
    prinT(x);
}
