#include <iostream>
//function1
template<typename T1, typename T2>
T1 call(T2 value)
{
//function with return type
std::cout << "function1\n";
return T1();
}
//function2
template<typename T1, typename T2>
void call<void,T2>()
{
//function without return type
std::cout << "function2\n";
}
int main() {
call<int>(19); //call function1
call<void>(20); //call function2
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogCi8vZnVuY3Rpb24xCnRlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KVDEgY2FsbChUMiB2YWx1ZSkKewogICAgLy9mdW5jdGlvbiB3aXRoIHJldHVybiB0eXBlCiAgICBzdGQ6OmNvdXQgPDwgImZ1bmN0aW9uMVxuIjsKICAgIHJldHVybiBUMSgpOwp9CiAKLy9mdW5jdGlvbjIKdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgp2b2lkIGNhbGw8dm9pZCxUMj4oKQp7CiAgICAvL2Z1bmN0aW9uIHdpdGhvdXQgcmV0dXJuIHR5cGUgIAogICAgc3RkOjpjb3V0IDw8ICJmdW5jdGlvbjJcbiI7Cn0KIAppbnQgbWFpbigpIHsKICAgIGNhbGw8aW50PigxOSk7ICAvL2NhbGwgZnVuY3Rpb24xCiAgICBjYWxsPHZvaWQ+KDIwKTsgLy9jYWxsIGZ1bmN0aW9uMiAKfQ==