"profiler/vscode:/vscode.git/clone" did not exist on "7d5403e623ea6c4a2081c1a61d54e55628797748"
Commit 78f72412 authored by Po-Yen, Chen's avatar Po-Yen, Chen
Browse files

Add check for range types

parent 515b4c8d
...@@ -157,7 +157,9 @@ struct is_range : std::false_type ...@@ -157,7 +157,9 @@ struct is_range : std::false_type
template <typename T> template <typename T>
struct is_range<T, struct is_range<T,
std::void_t<decltype(begin(std::declval<T>())), decltype(end(std::declval<T>()))>> std::void_t<decltype(begin(std::declval<T>())),
decltype(end(std::declval<T>())),
decltype(begin(std::declval<T>()) != end(std::declval<T>()))>>
: std::bool_constant<is_iterator_v<ck::remove_cvref_t<decltype(begin(std::declval<T>()))>>> : std::bool_constant<is_iterator_v<ck::remove_cvref_t<decltype(begin(std::declval<T>()))>>>
{ {
}; };
...@@ -214,6 +216,8 @@ inline constexpr bool is_random_access_range_v = is_random_access_range<Range>:: ...@@ -214,6 +216,8 @@ inline constexpr bool is_random_access_range_v = is_random_access_range<Range>::
template <typename Range> template <typename Range>
class to_array_proxy class to_array_proxy
{ {
static_assert(is_range_v<Range>);
public: public:
explicit to_array_proxy(const Range& source) noexcept : source_(source) {} explicit to_array_proxy(const Range& source) noexcept : source_(source) {}
...@@ -237,6 +241,8 @@ class to_array_proxy ...@@ -237,6 +241,8 @@ class to_array_proxy
template <typename Range> template <typename Range>
inline auto to_array(Range& range) noexcept inline auto to_array(Range& range) noexcept
-> std::enable_if_t<detail::is_range_v<Range>,
detail::to_array_proxy<ck::remove_cvref_t<Range>>>
{ {
return detail::to_array_proxy<ck::remove_cvref_t<Range>>{range}; return detail::to_array_proxy<ck::remove_cvref_t<Range>>{range};
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment