#include <iostream>
typedef bool(*DefaultComparator)(int);
bool NumberIsEven(int i)
{
return i % 2 == 0;
}
template<typename compare = DefaultComparator>
void CheckNumber(int j, compare cmp = nullptr)
{
if (j > 0 && (cmp ? cmp(j) : true))
std::cout << "checked" << std::endl;
else
std::cout << "failed" << std::endl;
}
int main()
{
CheckNumber(1);
CheckNumber(1, NumberIsEven);
CheckNumber(2);
CheckNumber(2, NumberIsEven);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdHlwZWRlZiBib29sKCpEZWZhdWx0Q29tcGFyYXRvcikoaW50KTsKCmJvb2wgTnVtYmVySXNFdmVuKGludCBpKQp7CglyZXR1cm4gaSAlIDIgPT0gMDsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgY29tcGFyZSA9IERlZmF1bHRDb21wYXJhdG9yPgp2b2lkIENoZWNrTnVtYmVyKGludCBqLCBjb21wYXJlIGNtcCA9IG51bGxwdHIpCnsKCWlmIChqID4gMCAmJiAoY21wID8gY21wKGopIDogdHJ1ZSkpCgkJc3RkOjpjb3V0IDw8ICJjaGVja2VkIiA8PCBzdGQ6OmVuZGw7CgllbHNlCgkJc3RkOjpjb3V0IDw8ICJmYWlsZWQiIDw8IHN0ZDo6ZW5kbDsKfQoKaW50IG1haW4oKQp7CglDaGVja051bWJlcigxKTsKCUNoZWNrTnVtYmVyKDEsIE51bWJlcklzRXZlbik7CglDaGVja051bWJlcigyKTsKCUNoZWNrTnVtYmVyKDIsIE51bWJlcklzRXZlbik7Cn0=