#include <iostream>
struct parser {
template <typename... T>
parser(std::string head, T... tail) {
add_options(std::move(head), std::forward<T>(tail)...);
}
// Base case
void add_options(std::string head) {
std::cout << "option: " << head.c_str() << "\n";
}
// Recursive case
template <typename T0, typename... Ts>
void add_options(std::string head, T0&& t0, Ts&&... ts) {
add_options(std::move(head));
add_options(std::forward<T0>(t0), std::forward<Ts>(ts)...);
}
};
int main() {
parser parse("hello", "world");
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogICAgc3RydWN0IHBhcnNlciB7CiAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUPgogICAgICBwYXJzZXIoc3RkOjpzdHJpbmcgaGVhZCwgVC4uLiB0YWlsKSB7CiAgICAgICAgYWRkX29wdGlvbnMoc3RkOjptb3ZlKGhlYWQpLCBzdGQ6OmZvcndhcmQ8VD4odGFpbCkuLi4pOwogICAgICB9CgogICAgICAvLyBCYXNlIGNhc2UKICAgICAgdm9pZCBhZGRfb3B0aW9ucyhzdGQ6OnN0cmluZyBoZWFkKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJvcHRpb246ICIgPDwgaGVhZC5jX3N0cigpIDw8ICJcbiI7CiAgICAgIH0KCiAgICAgIC8vIFJlY3Vyc2l2ZSBjYXNlCiAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUMCwgdHlwZW5hbWUuLi4gVHM+CiAgICAgIHZvaWQgYWRkX29wdGlvbnMoc3RkOjpzdHJpbmcgaGVhZCwgVDAmJiB0MCwgVHMmJi4uLiB0cykgewogICAgICAgIGFkZF9vcHRpb25zKHN0ZDo6bW92ZShoZWFkKSk7CiAgICAgICAgYWRkX29wdGlvbnMoc3RkOjpmb3J3YXJkPFQwPih0MCksIHN0ZDo6Zm9yd2FyZDxUcz4odHMpLi4uKTsKICAgICAgfQogICAgfTsKCiAgICBpbnQgbWFpbigpIHsKICAgICAgcGFyc2VyIHBhcnNlKCJoZWxsbyIsICJ3b3JsZCIpOwogICAgfQ==