* toDelim<SomeString>(SomeString str) returns itself.
*/
template <class Tgt, class Delim, class Src>
-typename std::enable_if<IsSomeString<Tgt>::value &&
- std::is_same<Tgt, Src>::value,
- Tgt>::type
-toDelim(const Delim& /* delim */, const Src& value) {
- return value;
+typename std::enable_if<
+ IsSomeString<Tgt>::value &&
+ std::is_same<Tgt, typename std::decay<Src>::type>::value,
+ Tgt>::type
+toDelim(const Delim& /* delim */, Src&& value) {
+ return std::forward<Src>(value);
}
/**
template <class Tgt, class Src>
typename std::enable_if<
std::is_enum<Tgt>::value && !std::is_same<Src, Tgt>::value,
- Tgt>::type
+ Expected<Tgt, ConversionCode>>::type
tryTo(const Src& value) {
using I = typename std::underlying_type<Tgt>::type;
return tryTo<I>(value).then([](I i) { return static_cast<Tgt>(i); });