summaryrefslogtreecommitdiff
path: root/src/command_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2021-11-21 11:15:08 +1100
committerMaxime Coste <mawww@kakoune.org>2021-11-21 11:41:50 +1100
commit91550639bbbd20c92957b83abfbb3ec4c43b3ab4 (patch)
tree6559c52e84e7e1abef540cf0636f322c1e5acbea /src/command_manager.cc
parentcd2172eed6dd7aca7c24972e4dac0258e19c070b (diff)
More C++20 refactorings
Use CTAD instead of make functions, requires instead of enable_if
Diffstat (limited to 'src/command_manager.cc')
-rw-r--r--src/command_manager.cc5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/command_manager.cc b/src/command_manager.cc
index 2c067978..a8212d06 100644
--- a/src/command_manager.cc
+++ b/src/command_manager.cc
@@ -297,14 +297,15 @@ Token parse_percent_token(ParseState& state, bool throw_on_unterminated)
}
}
-template<typename Target, typename = std::enable_if_t<std::is_same_v<Target, Vector<String>> or std::is_same_v<Target, String>>>
+template<typename Target>
+ requires (std::is_same_v<Target, Vector<String>> or std::is_same_v<Target, String>)
void expand_token(Token&& token, const Context& context, const ShellContext& shell_context, Target& target)
{
constexpr bool single = std::is_same_v<Target, String>;
auto set_target = [&](auto&& s) {
if constexpr (single)
target = std::move(s);
- else if constexpr (std::is_same_v<std::decay_t<decltype(s)>, String>)
+ else if constexpr (std::is_same_v<std::remove_cvref_t<decltype(s)>, String>)
target.push_back(std::move(s));
else if constexpr (std::is_same_v<decltype(s), Vector<String>&&>)
target.insert(target.end(), std::make_move_iterator(s.begin()), std::make_move_iterator(s.end()));