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