#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;
}