diff --git a/include/cpp2util.h b/include/cpp2util.h index f101af45f4..e778442ab3 100644 --- a/include/cpp2util.h +++ b/include/cpp2util.h @@ -213,6 +213,7 @@ #include #include #include + #include #ifndef CPP2_NO_EXCEPTIONS #include @@ -1493,25 +1494,26 @@ inline auto to_string(std::tuple const& t) -> std::string //----------------------------------------------------------------------- // -// args: see main() arguments as vector +// args: see main() arguments as std::ranges::view // //----------------------------------------------------------------------- // -struct args_t : std::vector +struct args_t : std::ranges::transform_view< + std::span, + decltype([](char const* s) { return std::string_view{s}; }) + > { - args_t(int c, char const* const* v) : vector{static_cast(c)}, argc{c}, argv{v} {} - int argc = 0; char const* const* argv = nullptr; }; inline auto make_args(int argc, char const* const* argv) -> args_t { - auto ret = args_t{argc, argv}; - for (auto i = 0; i < argc; ++i) { - ret[i] = std::string_view{argv[i]}; - } - return ret; + return args_t{ + { std::span(argv, argc), {} }, + argc, + argv + }; }