feat: make SFINAE condition strict

This commit is contained in:
ToruNiina
2019-06-02 19:04:32 +09:00
parent 6d17d5f60f
commit 6569c26e1b

View File

@@ -416,8 +416,9 @@ T get(const basic_value<C, M, V>& v)
// for toml::table. // for toml::table.
template<typename T, typename Table> template<typename T, typename Table>
enable_if_t<detail::is_map<Table>::value, decltype( enable_if_t<detail::conjunction<detail::is_map<Table>,
::toml::get<T>(std::declval<typename Table::mapped_type&>()))> detail::is_basic_value<typename Table::mapped_type>>::value,
decltype(::toml::get<T>(std::declval<typename Table::mapped_type&>()))>
find(Table& tab, const toml::key& ky, std::string tn = "unknown table") find(Table& tab, const toml::key& ky, std::string tn = "unknown table")
{ {
if(tab.count(ky) == 0) if(tab.count(ky) == 0)
@@ -428,8 +429,9 @@ find(Table& tab, const toml::key& ky, std::string tn = "unknown table")
return ::toml::get<T>(tab.at(ky)); return ::toml::get<T>(tab.at(ky));
} }
template<typename T, typename Table> template<typename T, typename Table>
enable_if_t<detail::is_map<Table>::value, decltype( enable_if_t<detail::conjunction<detail::is_map<Table>,
::toml::get<T>(std::declval<typename Table::mapped_type const&>()))> detail::is_basic_value<typename Table::mapped_type>>::value,
decltype(::toml::get<T>(std::declval<typename Table::mapped_type const&>()))>
find(Table const& tab, const toml::key& ky, std::string tn = "unknown table") find(Table const& tab, const toml::key& ky, std::string tn = "unknown table")
{ {
if(tab.count(ky) == 0) if(tab.count(ky) == 0)
@@ -440,8 +442,9 @@ find(Table const& tab, const toml::key& ky, std::string tn = "unknown table")
return ::toml::get<T>(tab.at(ky)); return ::toml::get<T>(tab.at(ky));
} }
template<typename T, typename Table> template<typename T, typename Table>
enable_if_t<detail::is_map<Table>::value, decltype( enable_if_t<detail::conjunction<detail::is_map<Table>,
::toml::get<T>(std::declval<typename Table::mapped_type &&>()))> detail::is_basic_value<typename Table::mapped_type>>::value,
decltype(::toml::get<T>(std::declval<typename Table::mapped_type &&>()))>
find(typename std::remove_reference<Table>&& tab, const toml::key& ky, find(typename std::remove_reference<Table>&& tab, const toml::key& ky,
std::string tn = "unknown table") std::string tn = "unknown table")
{ {