#include <iostream>
void foo(double me) {
std::cout << "I am floating cockerel " << me << std::endl;
}
void foo(int me) {
std::cout << "Je suis integer " << me << std::endl;
}
void foo(const char * me) {
std::cout << "Soy string " << me << std::endl;
}
template<int what> auto kukareku();
template<> auto kukareku<0>() {return 42;}
template<> auto kukareku<1>() {return 3.14;}
template<> auto kukareku<2>() {return "stroka";}
int main() {
foo(kukareku<0>());
foo(kukareku<1>());
foo(kukareku<2>());
foo(42);
foo(3.14);
foo("stroka");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdm9pZCBmb28oZG91YmxlIG1lKSB7CiAgICBzdGQ6OmNvdXQgPDwgIkkgYW0gZmxvYXRpbmcgY29ja2VyZWwgIiA8PCBtZSA8PCBzdGQ6OmVuZGw7Cn0KCnZvaWQgZm9vKGludCBtZSkgewogICAgc3RkOjpjb3V0IDw8ICJKZSBzdWlzIGludGVnZXIgIiA8PCBtZSA8PCBzdGQ6OmVuZGw7Cn0KCnZvaWQgZm9vKGNvbnN0IGNoYXIgKiBtZSkgewogICAgc3RkOjpjb3V0IDw8ICJTb3kgc3RyaW5nICIgPDwgbWUgPDwgc3RkOjplbmRsOwp9Cgp0ZW1wbGF0ZTxpbnQgd2hhdD4gYXV0byBrdWthcmVrdSgpOwoKdGVtcGxhdGU8PiBhdXRvIGt1a2FyZWt1PDA+KCkge3JldHVybiA0Mjt9CnRlbXBsYXRlPD4gYXV0byBrdWthcmVrdTwxPigpIHtyZXR1cm4gMy4xNDt9CnRlbXBsYXRlPD4gYXV0byBrdWthcmVrdTwyPigpIHtyZXR1cm4gInN0cm9rYSI7fQoKaW50IG1haW4oKSB7CiAgICBmb28oa3VrYXJla3U8MD4oKSk7CiAgICBmb28oa3VrYXJla3U8MT4oKSk7CiAgICBmb28oa3VrYXJla3U8Mj4oKSk7CgogICAgZm9vKDQyKTsKICAgIGZvbygzLjE0KTsKICAgIGZvbygic3Ryb2thIik7CgogICAgcmV0dXJuIDA7Cn0=