diff --git a/include/cppast/parser.hpp b/include/cppast/parser.hpp index 8e7ea0a..241930d 100644 --- a/include/cppast/parser.hpp +++ b/include/cppast/parser.hpp @@ -149,6 +149,33 @@ namespace cppast type_safe::object_ref idx_; }; + namespace detail + { + struct std_begin + { + }; + struct adl_begin : std_begin + { + }; + struct member_begin : adl_begin + { + }; + + template + auto get_value_type_impl(member_begin, Range&& r) + -> decltype(std::forward(r).begin()); + + template + auto get_value_type_impl(adl_begin, Range&& r) -> decltype(begin(std::forward(r))); + + template + auto get_value_type_impl(std_begin, Range&& r) + -> decltype(std::begin(std::forward(r))); + + template + using value_type = decltype(*get_value_type_impl(member_begin{}, std::declval())); + } // namespace detail + /// Parses multiple files using a given `FileParser`. /// /// \effects Will call the `parse()` function for each path specified in the `file_names`, @@ -166,7 +193,7 @@ namespace cppast template auto parse_files(FileParser& parser, Range&& file_names, const Configuration& get_config) -> typename std::enable_if(file_names).begin()))>::type, + std::declval>()))>::type, typename FileParser::config>::value>::type { for (auto&& file : std::forward(file_names))