#include <iostream>
#include <type_traits>
// 2. the second template argument is only valid if T is an integral type:
template < class T,
class = typename std::enable_if<std::is_integral<T>::value>::type>
bool is_even (T i) {return !bool(i%2);}
int main() {
short int i = 1; // code does not compile if type of i is not integral
std::cout << std::boolalpha;
std::cout << "i is even: " << is_even(i) << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CgovLyAyLiB0aGUgc2Vjb25kIHRlbXBsYXRlIGFyZ3VtZW50IGlzIG9ubHkgdmFsaWQgaWYgVCBpcyBhbiBpbnRlZ3JhbCB0eXBlOgp0ZW1wbGF0ZSA8IGNsYXNzIFQsCiAgICAgICAgICAgY2xhc3MgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZT46OnR5cGU+CmJvb2wgaXNfZXZlbiAoVCBpKSB7cmV0dXJuICFib29sKGklMik7fQoKaW50IG1haW4oKSB7CiAgc2hvcnQgaW50IGkgPSAxOyAgICAvLyBjb2RlIGRvZXMgbm90IGNvbXBpbGUgaWYgdHlwZSBvZiBpIGlzIG5vdCBpbnRlZ3JhbAogIHN0ZDo6Y291dCA8PCBzdGQ6OmJvb2xhbHBoYTsKICBzdGQ6OmNvdXQgPDwgImkgaXMgZXZlbjogIiA8PCBpc19ldmVuKGkpIDw8IHN0ZDo6ZW5kbDsKCiAgcmV0dXJuIDA7Cn0=