#include <iostream>
#define RESULT(func, ...) Result<decltype(func(__VA_ARGS__))>
template<typename T>
class Result {
public:
void foo() {
std::cout << "bar\n";
}
};
int main(int argc, char **argv) {
RESULT(main, argc, argv) result; // same as `Result<int> result;`
result.foo();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKI2RlZmluZSBSRVNVTFQoZnVuYywgLi4uKSBSZXN1bHQ8ZGVjbHR5cGUoZnVuYyhfX1ZBX0FSR1NfXykpPgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgUmVzdWx0IHsKcHVibGljOgogICAgdm9pZCBmb28oKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJiYXJcbiI7CiAgICB9Cn07CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKICAgIFJFU1VMVChtYWluLCBhcmdjLCBhcmd2KSByZXN1bHQ7IC8vIHNhbWUgYXMgYFJlc3VsdDxpbnQ+IHJlc3VsdDtgCiAgICAKICAgIHJlc3VsdC5mb28oKTsKICAgIAogICAgcmV0dXJuIDA7Cn0=