diff --git a/src/compression/lzma.cpp b/src/compression/lzma.cpp index 02f01b19..10b77168 100644 --- a/src/compression/lzma.cpp +++ b/src/compression/lzma.cpp @@ -91,10 +91,7 @@ T find_option(sorted_array_map const& options, template std::string option_names(sorted_array_map const& options) { - // The string_view is needed because ranges::views::join() will include - // the null terminator when using a string literal. - static constexpr std::string_view kJoiner{", "}; - return options | ranges::views::keys | ranges::views::join(kJoiner) | + return options | ranges::views::keys | ranges::views::join(", "sv) | ranges::to; } diff --git a/src/writer/fragment_order_parser.cpp b/src/writer/fragment_order_parser.cpp index 76bdc2e5..eccbeb52 100644 --- a/src/writer/fragment_order_parser.cpp +++ b/src/writer/fragment_order_parser.cpp @@ -37,22 +37,20 @@ namespace dwarfs::writer { namespace { -constexpr std::array, 5> - order_choices{{ - {"none", fragment_order_mode::NONE}, - {"path", fragment_order_mode::PATH}, - {"revpath", fragment_order_mode::REVPATH}, - {"similarity", fragment_order_mode::SIMILARITY}, - {"nilsimsa", fragment_order_mode::NILSIMSA}, - }}; +using namespace std::string_view_literals; + +constexpr std::array order_choices{ + std::pair{"none"sv, fragment_order_mode::NONE}, + std::pair{"path"sv, fragment_order_mode::PATH}, + std::pair{"revpath"sv, fragment_order_mode::REVPATH}, + std::pair{"similarity"sv, fragment_order_mode::SIMILARITY}, + std::pair{"nilsimsa"sv, fragment_order_mode::NILSIMSA}, +}; } // namespace std::string fragment_order_parser::choices() { - // The string_view is needed because ranges::views::join() will include - // the null terminator when using a string literal. - static constexpr std::string_view kJoiner{", "}; - return ranges::views::keys(order_choices) | ranges::views::join(kJoiner) | + return ranges::views::keys(order_choices) | ranges::views::join(", "sv) | ranges::to(); } diff --git a/tools/src/universal.cpp b/tools/src/universal.cpp index 3de33bc8..c8f42082 100644 --- a/tools/src/universal.cpp +++ b/tools/src/universal.cpp @@ -34,6 +34,7 @@ #include #include +#include #include #include #include @@ -41,6 +42,7 @@ namespace { using namespace dwarfs::tool; +using namespace std::string_view_literals; #ifdef _WIN32 #define EXE_EXT ".exe" @@ -48,11 +50,11 @@ using namespace dwarfs::tool; #define EXE_EXT "" #endif -std::map const functions{ - {"dwarfs", dwarfs_main}, - {"mkdwarfs", mkdwarfs_main}, - {"dwarfsck", dwarfsck_main}, - {"dwarfsextract", dwarfsextract_main}, +constexpr dwarfs::sorted_array_map functions{ + std::pair{"dwarfs"sv, &dwarfs_main}, + std::pair{"mkdwarfs"sv, &mkdwarfs_main}, + std::pair{"dwarfsck"sv, &dwarfsck_main}, + std::pair{"dwarfsextract"sv, &dwarfsextract_main}, }; } // namespace @@ -98,10 +100,7 @@ int SYS_MAIN(int argc, sys_char** argv) { // nope, just print the help - // The string_view is needed because ranges::views::join() will include - // the null terminator when using a string literal. - static constexpr std::string_view kJoiner{", "}; - auto tools = ranges::views::keys(functions) | ranges::views::join(kJoiner) | + auto tools = ranges::views::keys(functions) | ranges::views::join(", "sv) | ranges::to; // clang-format off