@@ -3807,14 +3807,14 @@ struct is_std_tuple_impl<std::tuple<Ts...>> : std::true_type{};
38073807template<typename T>
38083808using is_std_tuple = is_std_tuple_impl<cxx::remove_cvref_t<T>>;
38093809
3810- #if TOML11_CPLUSPLUS_STANDARD_VERSION >= TOML11_CXX17_VALUE
3811- # if __has_include(<optional>)
3810+ #if defined(TOML11_HAS_OPTIONAL)
38123811template<typename T> struct is_std_optional_impl : std::false_type{};
38133812template<typename T>
38143813struct is_std_optional_impl<std::optional<T>> : std::true_type{};
38153814template<typename T>
38163815using is_std_optional = is_std_optional_impl<cxx::remove_cvref_t<T>>;
3817- # endif // <optional>
3816+ #else
3817+ template<typename T> struct is_std_optional : std::false_type{};
38183818#endif // > C++17
38193819
38203820template<typename T> struct is_std_array_impl : std::false_type{};
@@ -3853,6 +3853,11 @@ template<typename V, typename S>
38533853struct is_string_view_of : std::false_type {};
38543854template<typename C, typename T>
38553855struct is_string_view_of<std::basic_string_view<C, T>, std::basic_string<C, T>> : std::true_type {};
3856+ #else
3857+ template<typename T>
3858+ struct is_std_basic_string_view : std::false_type {};
3859+ template<typename V, typename S>
3860+ struct is_string_view_of : std::false_type {};
38563861#endif
38573862
38583863template<typename T> struct is_chrono_duration_impl: std::false_type{};
@@ -9471,21 +9476,24 @@ namespace toml
94719476// find<T>(value, key);
94729477
94739478template<typename T, typename TC>
9474- decltype(::toml::get<T>(std::declval<basic_value<TC> const&>()))
9479+ cxx::enable_if_t<cxx::negation<detail::is_std_optional<T>>::value,
9480+ decltype(::toml::get<T>(std::declval<basic_value<TC> const&>()))>
94759481find(const basic_value<TC>& v, const typename basic_value<TC>::key_type& ky)
94769482{
94779483 return ::toml::get<T>(v.at(ky));
94789484}
94799485
94809486template<typename T, typename TC>
9481- decltype(::toml::get<T>(std::declval<basic_value<TC>&>()))
9487+ cxx::enable_if_t<cxx::negation<detail::is_std_optional<T>>::value,
9488+ decltype(::toml::get<T>(std::declval<basic_value<TC>&>()))>
94829489find(basic_value<TC>& v, const typename basic_value<TC>::key_type& ky)
94839490{
94849491 return ::toml::get<T>(v.at(ky));
94859492}
94869493
94879494template<typename T, typename TC>
9488- decltype(::toml::get<T>(std::declval<basic_value<TC>&&>()))
9495+ cxx::enable_if_t<cxx::negation<detail::is_std_optional<T>>::value,
9496+ decltype(::toml::get<T>(std::declval<basic_value<TC>&&>()))>
94899497find(basic_value<TC>&& v, const typename basic_value<TC>::key_type& ky)
94909498{
94919499 return ::toml::get<T>(std::move(v.at(ky)));
@@ -9495,19 +9503,22 @@ find(basic_value<TC>&& v, const typename basic_value<TC>::key_type& ky)
94959503// find<T>(value, idx)
94969504
94979505template<typename T, typename TC>
9498- decltype(::toml::get<T>(std::declval<basic_value<TC> const&>()))
9506+ cxx::enable_if_t<cxx::negation<detail::is_std_optional<T>>::value,
9507+ decltype(::toml::get<T>(std::declval<basic_value<TC> const&>()))>
94999508find(const basic_value<TC>& v, const std::size_t idx)
95009509{
95019510 return ::toml::get<T>(v.at(idx));
95029511}
95039512template<typename T, typename TC>
9504- decltype(::toml::get<T>(std::declval<basic_value<TC>&>()))
9513+ cxx::enable_if_t<cxx::negation<detail::is_std_optional<T>>::value,
9514+ decltype(::toml::get<T>(std::declval<basic_value<TC>&>()))>
95059515find(basic_value<TC>& v, const std::size_t idx)
95069516{
95079517 return ::toml::get<T>(v.at(idx));
95089518}
95099519template<typename T, typename TC>
9510- decltype(::toml::get<T>(std::declval<basic_value<TC>&&>()))
9520+ cxx::enable_if_t<cxx::negation<detail::is_std_optional<T>>::value,
9521+ decltype(::toml::get<T>(std::declval<basic_value<TC>&&>()))>
95119522find(basic_value<TC>&& v, const std::size_t idx)
95129523{
95139524 return ::toml::get<T>(std::move(v.at(idx)));
@@ -9716,19 +9727,22 @@ find(basic_value<TC>&& v, const K1& k1, const K2& k2, const Ks& ... ks)
97169727// find<T>(v, keys...)
97179728
97189729template<typename T, typename TC, typename K1, typename K2, typename ... Ks>
9719- decltype(::toml::get<T>(std::declval<const basic_value<TC>&>()))
9730+ cxx::enable_if_t<cxx::negation<detail::is_std_optional<T>>::value,
9731+ decltype(::toml::get<T>(std::declval<const basic_value<TC>&>()))>
97209732find(const basic_value<TC>& v, const K1& k1, const K2& k2, const Ks& ... ks)
97219733{
97229734 return find<T>(v.at(detail::key_cast<TC>(k1)), detail::key_cast<TC>(k2), ks...);
97239735}
97249736template<typename T, typename TC, typename K1, typename K2, typename ... Ks>
9725- decltype(::toml::get<T>(std::declval<basic_value<TC>&>()))
9737+ cxx::enable_if_t<cxx::negation<detail::is_std_optional<T>>::value,
9738+ decltype(::toml::get<T>(std::declval<basic_value<TC>&>()))>
97269739find(basic_value<TC>& v, const K1& k1, const K2& k2, const Ks& ... ks)
97279740{
97289741 return find<T>(v.at(detail::key_cast<TC>(k1)), detail::key_cast<TC>(k2), ks...);
97299742}
97309743template<typename T, typename TC, typename K1, typename K2, typename ... Ks>
9731- decltype(::toml::get<T>(std::declval<basic_value<TC>&&>()))
9744+ cxx::enable_if_t<cxx::negation<detail::is_std_optional<T>>::value,
9745+ decltype(::toml::get<T>(std::declval<basic_value<TC>&&>()))>
97329746find(basic_value<TC>&& v, const K1& k1, const K2& k2, const Ks& ... ks)
97339747{
97349748 return find<T>(std::move(v.at(detail::key_cast<TC>(k1))), detail::key_cast<TC>(k2), ks...);
0 commit comments