#include <array>
#include <iostream>
#include <string>
namespace detail
{
template<typename T>
std::string
to_string(T&& arg)
{
return std::string(std::forward<T>(arg));
}
}
template<typename... Args>
std::array<std::string, sizeof...(Args)>
ToStringArray(Args... args)
{
using detail::to_string;
using std::to_string;
std::array<std::string, sizeof...(Args)> unpack = {to_string(args)...};
return unpack;
}
int main()
{
auto Print = [](const auto &array)
{
std::cout << "Print array with size " << array.size() << std::endl;
for (auto &arg : array)
{
if (arg.empty())
{
std::cout << "empty string" << std::endl;
continue;
}
std::cout << arg << std::endl;
}
};
Print(ToStringArray(1u, "2", 0.3));;
Print(ToStringArray(std::string("")));
Print(ToStringArray());
return 0;
}
I2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxzdHJpbmc+CgpuYW1lc3BhY2UgZGV0YWlsCnsKCXRlbXBsYXRlPHR5cGVuYW1lIFQ+CglzdGQ6OnN0cmluZwoJdG9fc3RyaW5nKFQmJiBhcmcpCgl7CgkJcmV0dXJuIHN0ZDo6c3RyaW5nKHN0ZDo6Zm9yd2FyZDxUPihhcmcpKTsKCX0KfQoKdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4Kc3RkOjphcnJheTxzdGQ6OnN0cmluZywgc2l6ZW9mLi4uKEFyZ3MpPgpUb1N0cmluZ0FycmF5KEFyZ3MuLi4gYXJncykKewoJdXNpbmcgZGV0YWlsOjp0b19zdHJpbmc7Cgl1c2luZyBzdGQ6OnRvX3N0cmluZzsKCXN0ZDo6YXJyYXk8c3RkOjpzdHJpbmcsIHNpemVvZi4uLihBcmdzKT4gdW5wYWNrID0ge3RvX3N0cmluZyhhcmdzKS4uLn07CglyZXR1cm4gdW5wYWNrOwp9CgppbnQgbWFpbigpCnsKCWF1dG8gUHJpbnQgPSBbXShjb25zdCBhdXRvICZhcnJheSkKCQl7CgkJCXN0ZDo6Y291dCA8PCAiUHJpbnQgYXJyYXkgd2l0aCBzaXplICIgPDwgYXJyYXkuc2l6ZSgpIDw8IHN0ZDo6ZW5kbDsKCQkJZm9yIChhdXRvICZhcmcgOiBhcnJheSkKCQkJewoJCQkJaWYgKGFyZy5lbXB0eSgpKQoJCQkJewoJCQkJCXN0ZDo6Y291dCA8PCAiZW1wdHkgc3RyaW5nIiA8PCBzdGQ6OmVuZGw7CgkJCQkJY29udGludWU7CgkJCQl9CgkJCQlzdGQ6OmNvdXQgPDwgYXJnIDw8IHN0ZDo6ZW5kbDsKCQkJfQoJCX07CgkJCglQcmludChUb1N0cmluZ0FycmF5KDF1LCAiMiIsIDAuMykpOzsKCVByaW50KFRvU3RyaW5nQXJyYXkoc3RkOjpzdHJpbmcoIiIpKSk7CglQcmludChUb1N0cmluZ0FycmF5KCkpOwoKCXJldHVybiAwOwp9