diff --git a/toml/get.hpp b/toml/get.hpp index fedabc1..16516c1 100644 --- a/toml/get.hpp +++ b/toml/get.hpp @@ -31,10 +31,10 @@ get(const basic_value& v) template class M, template class V> -detail::enable_if_t>::value, T> && +detail::enable_if_t>::value, T> get(basic_value&& v) { - return std::move(v).template cast>::value>(); + return T(std::move(v).template cast>::value>()); } // ============================================================================ @@ -58,10 +58,10 @@ get(const basic_value& v) template class M, template class V> -inline detail::enable_if_t>::value, T> && +inline detail::enable_if_t>::value, T> get(basic_value&& v) { - return std::move(v); + return basic_value(std::move(v)); } // ============================================================================ @@ -130,10 +130,10 @@ get(const basic_value& v) template class M, template class V> -inline detail::enable_if_t::value, std::string>&& +inline detail::enable_if_t::value, std::string> get(basic_value&& v) { - return std::move(v.as_string().str); + return std::string(std::move(v.as_string().str)); } // ============================================================================ @@ -452,9 +452,9 @@ basic_value& find(basic_value& v, const key& ky) } template class M, template class V> -basic_value&& find(basic_value&& v, const key& ky) +basic_value find(basic_value&& v, const key& ky) { - auto& tab = v.as_table(); + typename basic_value::table_type tab = std::move(v).as_table(); if(tab.count(ky) == 0) { throw std::out_of_range(detail::format_underline(concat_to_string( @@ -462,7 +462,7 @@ basic_value&& find(basic_value&& v, const key& ky) {std::addressof(detail::get_region(v)), "in this table"} })); } - return std::move(tab.at(ky)); + return basic_value(std::move(tab.at(ky))); } // ---------------------------------------------------------------------------- @@ -505,7 +505,7 @@ template(std::declval&&>())) find(basic_value&& v, const key& ky) { - auto& tab = v.as_table(); + typename basic_value::table_type tab = std::move(v).as_table(); if(tab.count(ky) == 0) { throw std::out_of_range(detail::format_underline(concat_to_string( @@ -538,7 +538,7 @@ find(basic_value& v, const ::toml::key& ky, Ts&& ... keys) template class M, template class V, typename ... Ts> -basic_value&& +basic_value find(basic_value&& v, const ::toml::key& ky, Ts&& ... keys) { return ::toml::find(::toml::find(std::move(v), ky), std::forward(keys)...); @@ -706,7 +706,7 @@ get_or(const basic_value& v, T&& opt) } catch(...) { - return std::string(opt); + return std::string(std::forward(opt)); } } @@ -730,7 +730,7 @@ get_or(const basic_value& v, T&& opt) } catch(...) { - return std::forward(opt); + return detail::remove_cvref_t(std::forward(opt)); } } @@ -768,7 +768,7 @@ find_or(basic_value&& v, const toml::key& ky, basic_value&& op if(!v.is_table()) {return opt;} auto tab = std::move(v).as_table(); if(tab.count(ky) == 0) {return opt;} - return std::move(tab.at(ky)); + return basic_value(std::move(tab.at(ky))); } // ---------------------------------------------------------------------------