From 3998d6154ef8cd9e284b9d1c165cd9fd299f1fd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonathan=20M=C3=BCller?= Date: Mon, 3 Jul 2017 08:44:35 +0200 Subject: [PATCH] Allow arrays as range type for parse_files() --- include/cppast/parser.hpp | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) 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))