#include <iostream>
template <class ParamType>
struct IsGood
{
typedef bool (*Check)(const ParamType, int other);
};
template< typename ParamType >
void DoSmth(typename IsGood<ParamType>::Check isGood, const ParamType param)
{
if(isGood(param, 5))
std::cout << "good";
}
bool checkEqualInt(int i, int j){return i==j;}
int main()
{
DoSmth(checkEqualInt, 5);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPGNsYXNzIFBhcmFtVHlwZT4Kc3RydWN0IElzR29vZAp7CiAgICB0eXBlZGVmIGJvb2wgKCpDaGVjaykoY29uc3QgUGFyYW1UeXBlLCBpbnQgb3RoZXIpOwp9OwoKdGVtcGxhdGU8IHR5cGVuYW1lIFBhcmFtVHlwZSA+CnZvaWQgRG9TbXRoKHR5cGVuYW1lIElzR29vZDxQYXJhbVR5cGU+OjpDaGVjayBpc0dvb2QsIGNvbnN0IFBhcmFtVHlwZSBwYXJhbSkKewogICAgaWYoaXNHb29kKHBhcmFtLCA1KSkKICAgICAgICBzdGQ6OmNvdXQgPDwgImdvb2QiOwp9Cgpib29sIGNoZWNrRXF1YWxJbnQoaW50IGksIGludCBqKXtyZXR1cm4gaT09ajt9CgppbnQgbWFpbigpCnsKICAgIERvU210aChjaGVja0VxdWFsSW50LCA1KTsKfQ==