#include <iostream>
template <typename R, typename ... Types> constexpr size_t getArgumentCount( R(*f)(Types ...))
{
return sizeof...(Types);
}
void foo(int a, int b, int c)
{
}
int bar()
{
return 0;
}
int baz(double)
{
return 0;
}
int main()
{
std::cout << getArgumentCount(foo) << std::endl;
std::cout << getArgumentCount(bar) << std::endl;
std::cout << getArgumentCount(baz) << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFIsIHR5cGVuYW1lIC4uLiBUeXBlcz4gY29uc3RleHByIHNpemVfdCBnZXRBcmd1bWVudENvdW50KCBSKCpmKShUeXBlcyAuLi4pKQp7CiAgIHJldHVybiBzaXplb2YuLi4oVHlwZXMpOwp9Cgp2b2lkIGZvbyhpbnQgYSwgaW50IGIsIGludCBjKQp7Cn0KCmludCBiYXIoKQp7CiAgIHJldHVybiAwOwp9CgppbnQgYmF6KGRvdWJsZSkKewogICByZXR1cm4gMDsKfQoKaW50IG1haW4oKQp7CiAgICBzdGQ6OmNvdXQgPDwgZ2V0QXJndW1lbnRDb3VudChmb28pIDw8IHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dCA8PCBnZXRBcmd1bWVudENvdW50KGJhcikgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8IGdldEFyZ3VtZW50Q291bnQoYmF6KSA8PCBzdGQ6OmVuZGw7CiAgICByZXR1cm4gMDsKfQ==