#include <iostream>
using namespace std;
template <typename T>
void Test(T) {}
template<>
void Test(int)
{
cout << "Int" << endl;
}
template<>
void Test(float)
{
cout << "Float" << endl;
}
template<>
void Test(char)
{
cout << "Char" << endl;
}
template<>
void Test(bool)
{
cout << "Bool" << endl;
}
int main() {
auto bool1 = true;
auto int2 = 5;
auto float1 = 10.f; // This is a float, but the default floating point type is a double
auto byte1 = (char)'s';
auto z1 = bool1 + int2; // z is a ? (assuming you've defined the + operator for boolean)
auto z2 = float1 + int2; // z is a ?
auto z3 = byte1 + int2; // z is a ?
Test(bool1);
Test(int2);
Test(float1);
Test(byte1);
Test(z1);
Test(z2);
Test(z3);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnZvaWQgVGVzdChUKSB7fQoKdGVtcGxhdGU8Pgp2b2lkIFRlc3QoaW50KQp7Cgljb3V0IDw8ICJJbnQiIDw8IGVuZGw7Cn0KCnRlbXBsYXRlPD4Kdm9pZCBUZXN0KGZsb2F0KQp7Cgljb3V0IDw8ICJGbG9hdCIgPDwgZW5kbDsKfQoKdGVtcGxhdGU8Pgp2b2lkIFRlc3QoY2hhcikKewoJY291dCA8PCAiQ2hhciIgPDwgZW5kbDsKfQoKdGVtcGxhdGU8Pgp2b2lkIFRlc3QoYm9vbCkKewoJY291dCA8PCAiQm9vbCIgPDwgZW5kbDsKfQoKaW50IG1haW4oKSB7CglhdXRvIGJvb2wxID0gdHJ1ZTsKCWF1dG8gaW50MiA9IDU7CglhdXRvIGZsb2F0MSA9IDEwLmY7IC8vIFRoaXMgaXMgYSBmbG9hdCwgYnV0IHRoZSBkZWZhdWx0IGZsb2F0aW5nIHBvaW50IHR5cGUgaXMgYSBkb3VibGUKCWF1dG8gYnl0ZTEgPSAoY2hhcikncyc7CglhdXRvIHoxID0gYm9vbDEgKyBpbnQyOyAgICAvLyB6IGlzIGEgPyAoYXNzdW1pbmcgeW91J3ZlIGRlZmluZWQgdGhlICsgb3BlcmF0b3IgZm9yIGJvb2xlYW4pCglhdXRvIHoyID0gZmxvYXQxICsgaW50MjsgICAgLy8geiBpcyBhID8KCWF1dG8gejMgPSBieXRlMSArIGludDI7ICAgIC8vIHogaXMgYSA/CglUZXN0KGJvb2wxKTsKCVRlc3QoaW50Mik7CglUZXN0KGZsb2F0MSk7CglUZXN0KGJ5dGUxKTsKCVRlc3QoejEpOwoJVGVzdCh6Mik7CglUZXN0KHozKTsKCXJldHVybiAwOwp9