    #include <string>
    #include <iostream>
    using namespace std;

    template<typename Type>
    void func(Type, Type)
    {
        cout << "same" << endl;
    }

    template<typename TypeA, typename TypeO>
    void func(TypeA, TypeO)
    {
        cout << "different" << endl;
    }

    int main()
    {
        func(5, 3);                     // same
        func(5, 3.0);                   // different
        func(string("hello"), "hello"); // different
        func(5.0, 3.0);                 // same
        return 0;
    }