On 03/02/20 21:07 -0500, Patrick Palka wrote:
+#ifndef _RANGES_ALGO_H +#define _RANGES_ALGO_H 1 + +#if __cplusplus > 201703L + +#include <compare> +#include <cmath> +#include <iterator> +// #include <bits/range_concepts.h>
This line could be removed, or leave it as a reminder to me to refactor <ranges> so that the small utility pieces are in a small utility header (like <bits/ranges_concepts.h> that can be included instead of the whole of <ranges>.
+#include <ranges> +#include <bits/invoke.h> +#include <bits/cpp_type_traits.h> // __is_byte +#include <bits/random.h> // concept uniform_random_bit_generator
I wonder if we want to move that concept to <bits/uniform_rand_dist.h> instead, which already exists to allow <algorithm> to avoid including the whole of <random>. If we do that, it would make sense to rename <bits/uniform_rand_dist.h> to <bits/random_fwd.h> or something like that.
+ +#if __cpp_lib_concepts +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION +namespace ranges +{ + namespace __detail + { + template<typename _Tp> + constexpr inline bool __is_normal_iterator = false;
All these templates in the __detail namespace should be indented by two spaces after the template-head i.e. template<typename _Tp> constexpr inline bool __is_normal_iterator = false; (That indentation scheme has been in the libstdc++ style guide for longer than I've been contributing to the project, but it doesn't seem very popular with new contributors, and it wastes a level of indentation for templates, which means most of the library. Maybe we should revisit that convention.)
+ template<typename _Iter, typename _Out> + using unary_transform_result = copy_result<_Iter, _Out>; + + template<input_iterator _Iter, sentinel_for<_Iter> _Sent, + weakly_incrementable _Out, + copy_constructible _Fp, typename _Proj = identity> + requires writable<_Out, indirect_result_t<_Fp&, projected<_Iter, _Proj>>>
I have a pending patch to implement P1878R1, which renames writable (and a few other concepts). I'll wait until your patch is in, and change these places using it.
+ partial_sort_copy(_Iter1 __first, _Sent1 __last, + _Iter2 __result_first, _Sent2 __result_last, + _Comp __comp = {}, + _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) + { + if (__result_first == __result_last) + { + // TODO: Eliminating the variable __lasti triggers an ICE. + auto __lasti = ranges::next(std::move(__first), + std::move(__last)); + return {std::move(__lasti), std::move(__result_first)};
Please try to reduce that and report it to bugzilla at some point, thanks.
+++ b/libstdc++-v3/testsuite/25_algorithms/all_of/constrained.cc @@ -0,0 +1,90 @@ +// Copyright (C) 2019 Free Software Foundation, Inc.
This should be 2020. That's the only change necessary though, please adjust that and commit to master. Great work, thank you!