#include <memory>
template<typename... Args>
class Option
{
public:
Option(const Args&... arguments)
{
// irrelevant
}
// ...
};
void Choose()
{
//do nothing, end of list
}
template <typename... Args, class... Rest>
void Choose(const Option<Args...>& option, Rest&&... rest)
{
//irrelevant
Choose(std::forward<Rest>(rest)...);
}
int main() {
Choose(
Option<int>(1),
Option<int>(2),
Option<int>(3)
);
}
I2luY2x1ZGUgPG1lbW9yeT4KCnRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CmNsYXNzIE9wdGlvbgp7CnB1YmxpYzoKICAgIE9wdGlvbihjb25zdCBBcmdzJi4uLiBhcmd1bWVudHMpCiAgICB7CiAgICAgICAgLy8gaXJyZWxldmFudAogICAgfQogICAgLy8gLi4uCn07CgoKdm9pZCBDaG9vc2UoKQp7CgkvL2RvIG5vdGhpbmcsIGVuZCBvZiBsaXN0Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzLCBjbGFzcy4uLiBSZXN0Pgp2b2lkIENob29zZShjb25zdCBPcHRpb248QXJncy4uLj4mIG9wdGlvbiwgUmVzdCYmLi4uIHJlc3QpCnsKICAgIC8vaXJyZWxldmFudAogICAgCiAgICBDaG9vc2Uoc3RkOjpmb3J3YXJkPFJlc3Q+KHJlc3QpLi4uKTsKfQoKaW50IG1haW4oKSB7CiAgICBDaG9vc2UoCiAgICAgICAgT3B0aW9uPGludD4oMSksCiAgICAgICAgT3B0aW9uPGludD4oMiksCiAgICAgICAgT3B0aW9uPGludD4oMykKICAgICk7Cn0=