#include <iostream>
using namespace std;
template <typename T>
class has_helloworld
{
typedef char yes;
typedef long no;
template <typename C>
static yes test(decltype(&C::helloworld));
template <typename C>
static no test(...);
public:
enum { value = sizeof(test<T>(nullptr)) == sizeof(yes) };
};
class has_helloworld_class {
public:
void helloworld() {};
};
class no_helloworld_class {
};
int main () {
cout << has_helloworld<has_helloworld_class>::value << endl;
cout << has_helloworld<no_helloworld_class> ::value << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIGhhc19oZWxsb3dvcmxkCnsKCXR5cGVkZWYgY2hhciB5ZXM7Cgl0eXBlZGVmIGxvbmcgbm87CgoJdGVtcGxhdGUgPHR5cGVuYW1lIEM+CglzdGF0aWMgeWVzIHRlc3QoZGVjbHR5cGUoJkM6OmhlbGxvd29ybGQpKTsKCgl0ZW1wbGF0ZSA8dHlwZW5hbWUgQz4KCXN0YXRpYyBubyB0ZXN0KC4uLik7CgpwdWJsaWM6CgllbnVtIHsgdmFsdWUgPSBzaXplb2YodGVzdDxUPihudWxscHRyKSkgPT0gc2l6ZW9mKHllcykgfTsKfTsKCmNsYXNzIGhhc19oZWxsb3dvcmxkX2NsYXNzIHsKcHVibGljOgoJdm9pZCBoZWxsb3dvcmxkKCkge307Cn07CgpjbGFzcyBub19oZWxsb3dvcmxkX2NsYXNzIHsKfTsKCmludCBtYWluICgpIHsKCWNvdXQgPDwgaGFzX2hlbGxvd29ybGQ8aGFzX2hlbGxvd29ybGRfY2xhc3M+Ojp2YWx1ZSA8PCBlbmRsOwoJY291dCA8PCBoYXNfaGVsbG93b3JsZDxub19oZWxsb3dvcmxkX2NsYXNzPiA6OnZhbHVlIDw8IGVuZGw7Cn0=