summaryrefslogtreecommitdiff
path: root/src/command_manager.cc
diff options
context:
space:
mode:
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()));