From f00e36bce2f5ee1d418e23e7749dbcf4f9d61ce9 Mon Sep 17 00:00:00 2001 From: Jessica James Date: Sun, 14 Nov 2021 00:19:35 -0600 Subject: [PATCH] Default to vector instead of basic_string for non-trivial types --- src/include/jessilib/split.hpp | 6 +++--- src/include/jessilib/word_split.hpp | 6 +++--- src/test/split_compilation.cpp | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/include/jessilib/split.hpp b/src/include/jessilib/split.hpp index 695ae45..3e72b6a 100644 --- a/src/include/jessilib/split.hpp +++ b/src/include/jessilib/split.hpp @@ -32,7 +32,7 @@ namespace jessilib { template typename ContainerT, typename ElementT, typename...> struct split_defaults { - using member_type = std::basic_string; + using member_type = std::conditional_t, std::basic_string, std::vector>; using container_type = ContainerT; }; @@ -44,7 +44,7 @@ struct split_defaults { // Can probably be specialized for types which don't take in iterators _or_ template::value>::type* = nullptr> -MemberT make_split_member(ItrT in_itr, EndT in_end) { +constexpr MemberT make_split_member(ItrT in_itr, EndT in_end) { // Intended for string_view if constexpr (std::is_pointer_v) { return { in_itr, static_cast(in_end - in_itr) }; @@ -58,7 +58,7 @@ MemberT make_split_member(ItrT in_itr, EndT in_end) { } template::value>::type* = nullptr> -MemberT make_split_member(ItrT in_itr, EndT in_end) { +constexpr MemberT make_split_member(ItrT in_itr, EndT in_end) { // Can construct with iterators, so construct with iterators return { in_itr, in_end }; } diff --git a/src/include/jessilib/word_split.hpp b/src/include/jessilib/word_split.hpp index b4c3d3e..c756a8f 100644 --- a/src/include/jessilib/word_split.hpp +++ b/src/include/jessilib/word_split.hpp @@ -32,7 +32,7 @@ namespace jessilib { template typename ContainerT, typename ElementT, typename...> struct word_split_defaults { - using member_type = std::basic_string; + using member_type = std::conditional_t, std::basic_string, std::vector>; using container_type = ContainerT; }; @@ -44,7 +44,7 @@ struct word_split_defaults::value>::type* = nullptr> -MemberT make_word_split_member(ItrT in_itr, EndT in_end) { +constexpr MemberT make_word_split_member(ItrT in_itr, EndT in_end) { // Intended for string_view if constexpr (std::is_pointer_v) { return { in_itr, static_cast(in_end - in_itr) }; @@ -58,7 +58,7 @@ MemberT make_word_split_member(ItrT in_itr, EndT in_end) { } template::value>::type* = nullptr> -MemberT make_word_split_member(ItrT in_itr, EndT in_end) { +constexpr MemberT make_word_split_member(ItrT in_itr, EndT in_end) { // Can construct with iterators, so construct with iterators return { in_itr, in_end }; } diff --git a/src/test/split_compilation.cpp b/src/test/split_compilation.cpp index 74ed551..efd9496 100644 --- a/src/test/split_compilation.cpp +++ b/src/test/split_compilation.cpp @@ -105,6 +105,6 @@ TYPED_TEST(SplitCompilationTest, empty_list_long) { TYPED_TEST(SplitCompilationTest, random_vector) { std::vector>> empty; std::vector> delim; - std::vector>>> split_result = split(empty, delim); + auto split_result = split(empty, delim); EXPECT_TRUE(split_result.empty()); }