diff --git a/toml/get.hpp b/toml/get.hpp index b3bc337..04031f0 100644 --- a/toml/get.hpp +++ b/toml/get.hpp @@ -541,9 +541,12 @@ std::string get_or(const toml::value& v, T&& opt) // others (require type conversion and return type cannot be lvalue reference) template>, - detail::negation>, - detail::negation::type>> + detail::negation::type>::type>>, + detail::negation::type>::type>>, + detail::negation::type>> >::value, std::nullptr_t>::type = nullptr> T get_or(const toml::value& v, T&& opt) { @@ -554,7 +557,7 @@ T get_or(const toml::value& v, T&& opt) } catch(...) { - return opt; + return T(std::move(opt)); } } @@ -639,9 +642,12 @@ std::string find_or(const toml::value& v, const toml::key& ky, T&& opt) // --------------------------------------------------------------------------- // others (require type conversion and return type cannot be lvalue reference) template>, - detail::negation>, - detail::negation::type>> + detail::negation::type>::type>>, + detail::negation::type>::type>>, + detail::negation::type>> >::value, std::nullptr_t>::type = nullptr> T find_or(const toml::value& v, const toml::key& ky, T&& opt) { @@ -651,8 +657,8 @@ T find_or(const toml::value& v, const toml::key& ky, T&& opt) return get_or(tab.at(ky), std::forward(opt)); } -// =========================================================================== -// find_or(table, key, opt) +// --------------------------------------------------------------------------- +// toml::find(table) // --------------------------------------------------------------------------- // exact types (return type can be a reference) @@ -718,9 +724,12 @@ std::string find_or(const toml::table& tab, const toml::key& ky, T&& opt) // --------------------------------------------------------------------------- // others (require type conversion and return type cannot be lvalue reference) template>, - detail::negation>, - detail::negation::type>> + detail::negation::type>::type>>, + detail::negation::type>::type>>, + detail::negation::type>> >::value, std::nullptr_t>::type = nullptr> T find_or(const toml::table& tab, const toml::key& ky, T&& opt) {