はじめに(Introduction)
N4910 Working Draft, Standard for Programming Language C++
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/n4910.pdf
n4910は、ISO/IEC JTC1 SC22 WG21の作業原案(Working Draft)です。
公式のISO/IEC 14882原本ではありません。
ISO/IEC JTC1 SC22 WG21では、可能な限り作業文書を公開し、幅広い意見を求めています。
一連の記事はコード断片をコンパイルできる形にする方法を検討してコンパイル、リンク、実行して、規格案の原文と処理系(g++, Clang++)との違いを確認し、技術内容を検討し、ISO/IEC JTC1 SC22 WG21にフィードバックするために用います。
また、CERT C++, MISRA C++等のコーディング標準のコード断片をコンパイルする際の参考にさせていただこうと考えています。CERT C++, MISRA C++が標準化の動きとの時間的なずれがあれば確認できれば幸いです。また、boostライブラリとの関連、Linux OS, TOPPERSカーネル、g++(GCC), clang++(LLVM)との関係も調査中です。
何か、抜け漏れ、耳より情報がありましたらおしらせくださると幸いです。
<この項は書きかけです。順次追記します。>
背景(back ground)
C/C++でコンパイルエラーが出ると、途方にくれることがしばしばあります。
何回かに1回は、該当するエラーが検索できます。
ただ、条件が違っていて、そこでの修正方法では目的を達成しないこともしばしばです。いろいろな条件のコンパイルエラーとその対応方法について、広く記録することによって、いつか同じエラーに遭遇した時にやくに立つことを目指しています。
この半年の間で、三度、自分のネットでの記録に助けられたことがあります。
また過去に解決できなかった記録を10種類以上、最近になって解決できたことがあります。それは、主に次の3つの情報に基づいています。
cpprefjp - C++日本語リファレンス
コンパイラの実装状況
また
https://researchmap.jp/joub9b3my-1797580/#_1797580
に記載したサイトのお世話になっています。
作業方針(sequence)
Clang++では-std=c++03, C++2bの2種類
g++では-std=c++03, c++2bの2種類
でコンパイルし、
1)コンパイルエラーを収集する。
2)コンパイルエラーをなくす方法を検討する。
コンパイルエラーになる例を示すだけが目的のコードは、コンパイルエラーをなくすのではなく、コンパイルエラーの種類を収集するだけにする。
文法を示すのが目的のコード場合に、コンパイルエラーをなくすのに手間がかかる場合は、順次作業します。
3)リンクエラーをなくす方法を検討する。
文法を示すのが目的のコード場合に、リンクエラーをなくすのに手間がかかる場合は、順次作業します。
4)意味のある出力を作る。
コンパイル、リンクが通っても、意味のある出力を示そうとすると、コンパイル・リンクエラーが出て収拾できそうにない場合がある。順次作業します。
1)だけのものから4)まで進んだものと色々ある状態です。一歩でも前に進むご助言をお待ちしています。「検討事項」の欄に現状を記録するようにしています。
C++N4910:2022 Standard Working Draft on ISO/IEC 14882(0) sample code compile list
C++N4741, 2018 Standard Working Draft on ISO/IEC 14882 sample code compile list
C++N4606, 2016符号断片編纂一覧(example code compile list)
C++N4606, 2016 Working Draft 2016, ISO/IEC 14882, C++ standard(1) Example code compile list
https://qiita.com/kaizen_nagoya/items/df5d62c35bd6ed1c3d43/
C++N3242, 2011 sample code compile list on clang++ and g++
編纂器(Compiler)
clang++ --version
Debian clang version 14.0.5-++20220610033153+c12386ae247c-1~exp1~20220610153237.151
Target: x86_64-pc-linux-gnu, Thread model: posix, InstalledDir: /usr/bin
g++- --version
g++ (GCC) 12.1.0 Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
27.7 Mutating sequence operations [alg.modifying.operations] 27.7.1 Copy [alg.copy] C++N4910:2022 (661) p1206.cpp
算譜(source code)
// C++N4910 Committee Draft, Standard for Programming Language C++
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/n4910.pdf
const char * n4910 = "27.7 Mutating sequence operations [alg.modifying.operations] 27.7.1 Copy [alg.copy] C++N4910:2022 (661) p1206.cpp";
// Debian clang version 14.0.5-++20220610033153+c12386ae247c-
// g++ (GCC) 12.1.0 Copyright (C) 2022 Free Software Foundation, Inc.
// Edited by Dr. OGAWA Kiyoshi. Compile procedure and results record.
// C++N4910:2022 Standard Working Draft on ISO/IEC 14882(0) sample code compile list
// https://qiita.com/kaizen_nagoya/items/fc957ddddd402004bb91
#include "N4910.h"
using namespace std;
// 27.7.1 Copy [alg.copy]
template<class InputIterator, class OutputIterator>
constexpr OutputIterator copy(InputIterator first, InputIterator last,
OutputIterator result);
template<input_iterator I, sentinel_for<I> S, weakly_incrementable O>
requires indirectly_copyable<I, O>
constexpr ranges::copy_result<I, O> ranges::copy(I first, S last, O result);
template<input_range R, weakly_incrementable O>
requires indirectly_copyable<iterator_t<R>, O>
constexpr ranges::copy_result<borrowed_iterator_t<R>, O> ranges::copy(R&& r, O result);
Let N be last - first.
// Preconditions: result is not in the range [first, last).
// Effects: Copies elements in the range [first, last) into the range [result, result + N ) starting from first and proceeding to last. For each non-negative integer n < N, performs *(result + n) =
*(first + n). Returns:
// — result + N for the overload in namespace std.
// — {last, result + N} for the overloads in namespace ranges.
// Complexity: Exactly N assignments.
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>
ForwardIterator2 copy(ExecutionPolicy&& policy,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result);
// Preconditions: The ranges [first, last) and [result, result + (last - first)) do not overlap. Effects: Copies elements in the range [first, last) into the range [result, result + (last - first)).
For each non-negative integer n < (last - first), performs *(result + n) = *(first + n). Returns: result + (last - first).
Complexity: Exactly last - first assignments.
template<class InputIterator, class Size, class OutputIterator>
constexpr OutputIterator copy_n(InputIterator first, Size n,
OutputIterator result);
template<class ExecutionPolicy, class ForwardIterator1, class Size, class ForwardIterator2>
ForwardIterator2 copy_n(ExecutionPolicy&& exec,
ForwardIterator1 first, Size n,
ForwardIterator2 result);
template<input_iterator I, weakly_incrementable O>
requires indirectly_copyable<I, O>
constexpr ranges::copy_n_result<I, O>
// — result + N for the overloads in namespace std.
// — {first + N, result + N} for the overload in namespace ranges. // Complexity: Exactly N assignments.
indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
requires indirectly_copyable<iterator_t<R>, O>
constexpr ranges::copy_if_result<borrowed_iterator_t<R>, O>
ranges::copy_if(R&& r, O result, Pred pred, Proj proj = {});
Let E be:
// — bool(pred(*i)) for the overloads in namespace std;
// — bool(invoke(pred, invoke(proj, *i))) for the overloads in namespace ranges, and N be the number of iterators i in the range [first, last) for which the condition E holds. Preconditions: The ranges [first, last) and [result, result + (last - first)) do not overlap.
// [Note 1 : For the overload with an ExecutionPolicy, there might be a performance cost if iterator_traits<For- wardIterator1>::value_type is not Cpp17MoveConstructible (Table 30).
// Effects: Copies all of the elements referred to by the iterator i in the range [first, last) for which E is true.
// Returns: — result + N for the overloads in namespace std.
// — {last, result + N} for the overloads in namespace ranges.
Complexity: Exactly last - first applications of the corresponding predicate and any projection. Remarks: Stable (16.4.6.8).
requires indirectly_copyable<iterator_t<R>, I>
constexpr ranges::copy_backward_result<borrowed_iterator_t<R>, I>
ranges::copy_backward(R&& r, I result);
Let N be last - first.
// Preconditions: result is not in the range (first, last].
// Effects: Copies elements in the range [first, last) into the range [result - N , result) starting from last - 1 and proceeding to first.221 For each positive integer n ≤ N, performs *(result - n) =
template<class InputIterator, class OutputIterator, class Predicate>
constexpr OutputIterator copy_if(InputIterator first, InputIterator last,
OutputIterator result, Predicate pred);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2,
class Predicate>
ForwardIterator2 copy_if(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result, Predicate pred);
template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Proj = identity,
indirect_unary_predicate<projected<I, Proj>> Pred>
requires indirectly_copyable<I, O>
constexpr ranges::copy_if_result<I, O>
ranges::copy_if(I first, S last, O result, Pred pred, Proj proj = {});
template<input_range R, weakly_incrementable O, class Proj = identity,
template<class BidirectionalIterator1, class BidirectionalIterator2>
constexpr BidirectionalIterator2
copy_backward(BidirectionalIterator1 first,
BidirectionalIterator1 last,
BidirectionalIterator2 result);
template<bidirectional_iterator I1, sentinel_for<I1> S1, bidirectional_iterator I2>
requires indirectly_copyable<I1, I2>
constexpr ranges::copy_backward_result<I1, I2>
ranges::copy_backward(I1 first, S1 last, I2 result);
template<bidirectional_range R, bidirectional_iterator I>
// *(last - n).
// Returns: — result - N for the overload in namespace std.
// — {last, result - N} for the overloads in namespace ranges.
// Complexity: Exactly N assignments.
// 27.7.2 Move [alg.move]
template<class InputIterator, class OutputIterator>
constexpr OutputIterator move(InputIterator first, InputIterator last,
OutputIterator result);
template<input_iterator I, sentinel_for<I> S, weakly_incrementable O>
requires indirectly_movable<I, O>
constexpr ranges::move_result<I, O>
ranges::move(I first, S last, O result);
template<input_range R, weakly_incrementable O>
requires indirectly_movable<iterator_t<R>, O>
constexpr ranges::move_result<borrowed_iterator_t<R>, O>
ranges::move(R&& r, O result);
// Let E be — std::move(*(first + n)) for the overload in namespace std;
// — ranges::iter_move(first + n) for the overloads in namespace ranges.
// Let N be last - first.
// Preconditions: result is not in the range [first, last).
// Effects: Moves elements in the range [first, last) into the range [result, result + N ) starting from first and proceeding to last. For each non-negative integer n < N, performs *(result + n) = E.
// Returns: — result + N for the overload in namespace std.
// — {last, result + N} for the overloads in namespace ranges.
// Complexity: Exactly N assignments.
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>
ForwardIterator2 move(ExecutionPolicy&& policy,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result);
// Let N be last - first.
// Preconditions: The ranges [first,last) and [result,result + N) do not overlap.
Effects: Moves elements in the range [first,last) into the range [result,result + N). For each non-negative integer n < N, performs *(result + n) = std::move(*(first + n)).
// Returns: result + N.
// Complexity: Exactly N assignments.
template<class BidirectionalIterator1, class BidirectionalIterator2>
constexpr BidirectionalIterator2
move_backward(BidirectionalIterator1 first, BidirectionalIterator1 last,
BidirectionalIterator2 result);
template<bidirectional_iterator I1, sentinel_for<I1> S1, bidirectional_iterator I2>
requires indirectly_movable<I1, I2>
constexpr ranges::move_backward_result<I1, I2>
ranges::move_backward(I1 first, S1 last, I2 result);
template<bidirectional_range R, bidirectional_iterator I>
requires indirectly_movable<iterator_t<R>, I>
constexpr ranges::move_backward_result<borrowed_iterator_t<R>, I>
ranges::move_backward(R&& r, I result);
//Let E be — std::move(*(last - n)) for the overload in namespace std;
//— ranges::iter_move(last - n) for the overloads in namespace ranges.
Let N be last - first.
//Preconditions: result is not in the range (first, last].
//Effects: Moves elements in the range [first, last) into the range [result - N , result) starting from last - 1 and proceeding to first.222 For each positive integer n ≤ N, performs *(result - n) = E.
requires indirectly_swappable<iterator_t<R1>, iterator_t<R2>>
constexpr ranges::swap_ranges_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>>
ranges::swap_ranges(R1&& r1, R2&& r2);
//Let: — last2 be first2 + (last1 - first1) for the overloads with no parameter named last2;
//— M be min(last1 - first1, last2 - first2).
//Preconditions: The two ranges [first1, last1) and [first2, last2) do not overlap. For the overloads in namespace std, *(first1 + n) is swappable with (16.4.4.3) *(first2 + n).
//Effects: For each non-negative integer n < M performs:
//— swap(*(first1 + n), *(first2 + n)) for the overloads in namespace std;
//— ranges::iter_swap(first1 + n, first2 + n) for the overloads in namespace ranges.
Returns:
— last2 for the overloads in namespace std.
— {first1 + M, first2 + M} for the overloads in namespace ranges.
//Complexity: Exactly M swaps.
//Returns: — result - N for the overload in namespace std.
//— {last, result - N} for the overloads in namespace ranges.
//Complexity: Exactly N assignments. 27.7.3 Swap
template<class ForwardIterator1, class ForwardIterator2>
constexpr ForwardIterator2
swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>
ForwardIterator2
swap_ranges(ExecutionPolicy&& exec,
ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2);
[alg.swap]
template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2>
requires indirectly_swappable<I1, I2>
constexpr ranges::swap_ranges_result<I1, I2>
ranges::swap_ranges(I1 first1, S1 last1, I2 first2, S2 last2);
template<input_range R1, input_range R2>
requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
projected<iterator_t<R2>, Proj2>>>
constexpr ranges::binary_transform_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>, O>
ranges::transform(R1&& r1, R2&& r2, O result,
F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {});
//Let: — last2 be first2 + (last1 - first1) for the overloads with parameter first2 but no parameter last2;
template<class ForwardIterator1, class ForwardIterator2>
constexpr void iter_swap(ForwardIterator1 a, ForwardIterator2 b);
//Preconditions: a and b are dereferenceable. *a is swappable with (16.4.4.3) *b. Effects: As if by swap(*a, *b).
// 27.7.4 Transform [alg.transform]
template<class InputIterator, class OutputIterator,
class UnaryOperation>
constexpr OutputIterator
transform(InputIterator first1, InputIterator last1,
OutputIterator result, UnaryOperation op);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2,
class UnaryOperation>
ForwardIterator2
transform(ExecutionPolicy&& exec,
ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 result, UnaryOperation op);
template<class InputIterator1, class InputIterator2,
class OutputIterator, class BinaryOperation>
constexpr OutputIterator
transform(InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, OutputIterator result,
BinaryOperation binary_op);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2,
class ForwardIterator, class BinaryOperation>
ForwardIterator
transform(ExecutionPolicy&& exec,
ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2, ForwardIterator result,
BinaryOperation binary_op);
template<input_iterator I, sentinel_for<I> S, weakly_incrementable O,
copy_constructible F, class Proj = identity>
requires indirectly_writable<O, indirect_result_t<F&, projected<I, Proj>>>
constexpr ranges::unary_transform_result<I, O>
ranges::transform(I first1, S last1, O result, F op, Proj proj = {});
template<input_range R, weakly_incrementable O, copy_constructible F,
class Proj = identity>
requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R>, Proj>>>
constexpr ranges::unary_transform_result<borrowed_iterator_t<R>, O>
ranges::transform(R&& r, O result, F op, Proj proj = {});
template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2,
weakly_incrementable O, copy_constructible F, class Proj1 = identity,
class Proj2 = identity>
requires indirectly_writable<O, indirect_result_t<F&, projected<I1, Proj1>,
projected<I2, Proj2>>>
constexpr ranges::binary_transform_result<I1, I2, O>
ranges::transform(I1 first1, S1 last1, I2 first2, S2 last2, O result,
F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {});
template<input_range R1, input_range R2, weakly_incrementable O,
copy_constructible F, class Proj1 = identity, class Proj2 = identity>
// — N be last1 - first1 for unary transforms, or min(last1 - first1, last2 - first2) for binary transforms;
// — E be
// — op(*(first1 + (i - result))) for unary transforms defined in namespace std;
// — binary_op(*(first1 + (i - result)), *(first2 + (i - result))) for binary trans- forms defined in namespace std;
// — invoke(op, invoke(proj, *(first1 + (i - result)))) for unary transforms defined in namespace ranges;
// — invoke(binary_op, invoke(proj1, *(first1 + (i - result))), invoke(proj2, *(first2 + (i - result)))) for binary transforms defined in namespace ranges.
// Preconditions: op and binary_op do not invalidate iterators or subranges, nor modify elements in the ranges
// — [first1,first1 + N],
// — [first2,first2 + N], and — [result,result + N].223
// Effects: Assigns through every iterator i in the range [result,result + N) a new corresponding value equal to E.
// Returns: — result + N for the overloads defined in namespace std.
// — {first1 + N, result + N} for unary transforms defined in namespace ranges.
// — {first1 + N, first2 + N, result + N} for binary transforms defined in namespace ranges.
// Complexity: Exactly N applications of op or binary_op, and any projections. This requirement also applies to the overload with an ExecutionPolicy.
// Remarks: result may be equal to first1 or first2. 27.7.5 Replace
template<class ForwardIterator, class T>
constexpr void replace(ForwardIterator first, ForwardIterator last,
const T& old_value, const T& new_value);
template<class ExecutionPolicy, class ForwardIterator, class T>
void replace(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last,
const T& old_value, const T& new_value);
template<class ForwardIterator, class Predicate, class T>
constexpr void replace_if(ForwardIterator first, ForwardIterator last,
Predicate pred, const T& new_value);
template<class ExecutionPolicy, class ForwardIterator, class Predicate, class T>
void replace_if(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last,
Predicate pred, const T& new_value);
[alg.replace]
template<input_iterator I, sentinel_for<I> S, class T1, class T2, class Proj = identity>
requires indirectly_writable<I, const T2&> &&
indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T1*>
constexpr I
ranges::replace(I first, S last, const T1& old_value, const T2& new_value, Proj proj = {});
template<input_range R, class T1, class T2, class Proj = identity>
requires indirectly_writable<iterator_t<R>, const T2&> &&
indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T1*>
constexpr borrowed_iterator_t<R>
ranges::replace(R&& r, const T1& old_value, const T2& new_value, Proj proj = {});
template<input_iterator I, sentinel_for<I> S, class T, class Proj = identity,
indirect_unary_predicate<projected<I, Proj>> Pred>
requires indirectly_writable<I, const T&>
constexpr I ranges::replace_if(I first, S last, Pred pred, const T& new_value, Proj proj = {});
template<input_range R, class T, class Proj = identity,
indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
requires indirectly_writable<iterator_t<R>, const T&>
constexpr borrowed_iterator_t<R>
ranges::replace_if(R&& r, Pred pred, const T& new_value, Proj proj = {});
// Let E be — bool(*i == old_value) for replace;
// — bool(pred(*i)) for replace_if;
// — bool(invoke(proj, *i) == old_value) for ranges::replace;
// — bool(invoke(pred, invoke(proj, *i))) for ranges::replace_if.
// Mandates: new_value is writable (25.3.1) to first.
// Effects: Substitutes elements referred by the iterator i in the range [first,last) with new_value, when E is true.
// Returns: last for the overloads in namespace ranges.
// Complexity: Exactly last - first applications of the corresponding predicate and any projection.
template<class InputIterator, class OutputIterator, class T>
constexpr OutputIterator
replace_copy(InputIterator first, InputIterator last,
OutputIterator result,
const T& old_value, const T& new_value);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T>
ForwardIterator2
replace_copy(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result,
const T& old_value, const T& new_value);
template<class InputIterator, class OutputIterator, class Predicate, class T>
constexpr OutputIterator
replace_copy_if(InputIterator first, InputIterator last,
OutputIterator result,
Predicate pred, const T& new_value);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2,
class Predicate, class T>
ForwardIterator2
replace_copy_if(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result,
Predicate pred, const T& new_value);
template<input_iterator I, sentinel_for<I> S, class T1, class T2, output_iterator<const T2&> O,
class Proj = identity>
requires indirectly_copyable<I, O> &&
indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T1*>
constexpr ranges::replace_copy_result<I, O>
ranges::replace_copy(I first, S last, O result, const T1& old_value, const T2& new_value,
Proj proj = {});
template<input_range R, class T1, class T2, output_iterator<const T2&> O,
class Proj = identity>
requires indirectly_copyable<iterator_t<R>, O> &&
indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T1*>
constexpr ranges::replace_copy_result<borrowed_iterator_t<R>, O>
ranges::replace_copy(R&& r, O result, const T1& old_value, const T2& new_value,
Proj proj = {});
template<input_iterator I, sentinel_for<I> S, class T, output_iterator<const T&> O,
class Proj = identity, indirect_unary_predicate<projected<I, Proj>> Pred>
requires indirectly_copyable<I, O>
constexpr ranges::replace_copy_if_result<I, O>
ranges::replace_copy_if(I first, S last, O result, Pred pred, const T& new_value,
Proj proj = {});
template<input_range R, class T, output_iterator<const T&> O, class Proj = identity,
indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
requires indirectly_copyable<iterator_t<R>, O>
constexpr ranges::replace_copy_if_result<borrowed_iterator_t<R>, O>
ranges::replace_copy_if(R&& r, O result, Pred pred, const T& new_value,
Proj proj = {});
// Let E be — bool(*(first + (i - result)) == old_value) for replace_copy;
// — bool(pred(*(first + (i - result)))) for replace_copy_if;
// — bool(invoke(proj, *(first + (i - result))) == old_value) for ranges::replace_copy;
// — bool(invoke(pred, invoke(proj, *(first + (i - result))))) for ranges::replace_- copy_if.
// Mandates: The results of the expressions *first and new_value are writable (25.3.1) to result. Preconditions: The ranges [first, last) and [result, result + (last - first)) do not overlap.
// Effects: Assigns through every iterator i in the range [result,result + (last - first)) a new corresponding value
// — new_value if E is true or
// — *(first + (i - result)) otherwise. Returns:
// — result + (last - first) for the overloads in namespace std.
// — {last, result + (last - first)} for the overloads in namespace ranges.
// Complexity: Exactly last - first applications of the corresponding predicate and any projection.
// Let N be max(0, n) for the fill_n algorithms, and last - first for the fill algorithms. Mandates: The expression value is writable (25.3.1) to the output iterator. The type Size is convertible
to an integral type (7.3.9, 11.4.8).
// Effects: Assigns value through all the iterators in the range [first,first + N). Returns: first + N.
// 27.7.6 Fill [alg.fill]
template<class ForwardIterator, class T>
constexpr void fill(ForwardIterator first, ForwardIterator last, const T& value);
template<class ExecutionPolicy, class ForwardIterator, class T>
void fill(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last, const T& value);
template<class OutputIterator, class Size, class T>
constexpr OutputIterator fill_n(OutputIterator first, Size n, const T& value);
template<class ExecutionPolicy, class ForwardIterator, class Size, class T>
ForwardIterator fill_n(ExecutionPolicy&& exec,
ForwardIterator first, Size n, const T& value);
template<class T, output_iterator<const T&> O, sentinel_for<O> S>
constexpr O ranges::fill(O first, S last, const T& value);
template<class T, output_range<const T&> R>
constexpr borrowed_iterator_t<R> ranges::fill(R&& r, const T& value);
template<class T, output_iterator<const T&> O>
constexpr O ranges::fill_n(O first, iter_difference_t<O> n, const T& value);
// Complexity: Exactly N assignments. 27.7.7 Generate
template<class ForwardIterator, class Generator>
constexpr void generate(ForwardIterator first, ForwardIterator last,
Generator gen);
template<class ExecutionPolicy, class ForwardIterator, class Generator>
void generate(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last,
Generator gen);
template<class OutputIterator, class Size, class Generator>
constexpr OutputIterator generate_n(OutputIterator first, Size n, Generator gen);
template<class ExecutionPolicy, class ForwardIterator, class Size, class Generator>
ForwardIterator generate_n(ExecutionPolicy&& exec,
ForwardIterator first, Size n, Generator gen);
template<input_or_output_iterator O, sentinel_for<O> S, copy_constructible F>
requires invocable<F&> && indirectly_writable<O, invoke_result_t<F&>>
constexpr O ranges::generate(O first, S last, F gen);
template<class R, copy_constructible F>
requires invocable<F&> && output_range<R, invoke_result_t<F&>>
constexpr borrowed_iterator_t<R> ranges::generate(R&& r, F gen);
template<input_or_output_iterator O, copy_constructible F>
requires invocable<F&> && indirectly_writable<O, invoke_result_t<F&>>
constexpr O ranges::generate_n(O first, iter_difference_t<O> n, F gen);
// Let N be max(0, n) for the generate_n algorithms, and last - first for the generate algorithms. Mandates: Size is convertible to an integral type (7.3.9, 11.4.8).
// Effects: Assigns the result of successive evaluations of gen() through each iterator in the range [first,first + N).
// Returns: first + N.
// Complexity: Exactly N evaluations of gen() and assignments.
// 27.7.8 Remove [alg.remove]
template<class ForwardIterator, class T>
constexpr ForwardIterator remove(ForwardIterator first, ForwardIterator last,
const T& value);
template<class ExecutionPolicy, class ForwardIterator, class T>
ForwardIterator remove(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last,
const T& value);
template<class ForwardIterator, class Predicate>
constexpr ForwardIterator remove_if(ForwardIterator first, ForwardIterator last,
Predicate pred);
template<class ExecutionPolicy, class ForwardIterator, class Predicate>
ForwardIterator remove_if(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last,
Predicate pred);
template<permutable I, sentinel_for<I> S, class T, class Proj = identity>
requires indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T*>
constexpr subrange<I> ranges::remove(I first, S last, const T& value, Proj proj = {});
template<forward_range R, class T, class Proj = identity>
requires permutable<iterator_t<R>> &&
indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T*>
constexpr borrowed_subrange_t<R>
ranges::remove(R&& r, const T& value, Proj proj = {});
[alg.generate]
template<permutable I, sentinel_for<I> S, class Proj = identity,
indirect_unary_predicate<projected<I, Proj>> Pred>
constexpr subrange<I> ranges::remove_if(I first, S last, Pred pred, Proj proj = {});
template<forward_range R, class Proj = identity,
indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
requires permutable<iterator_t<R>>
constexpr borrowed_subrange_t<R>
ranges::remove_if(R&& r, Pred pred, Proj proj = {});
// Let E be
// — bool(*i == value) for remove;
// — bool(pred(*i)) for remove_if;
// — bool(invoke(proj, *i) == value) for ranges::remove;
// — bool(invoke(pred, invoke(proj, *i))) for ranges::remove_if.
// Preconditions: For the algorithms in namespace std, the type of *first meets the Cpp17MoveAssignable requirements (Table 32).
// Effects: Eliminates all the elements referred to by iterator i in the range [first, last) for which E holds.
Returns: Let j be the end of the resulting range. Returns: — j for the overloads in namespace std.
// — {j, last} for the overloads in namespace ranges.
// Complexity: Exactly last - first applications of the corresponding predicate and any projection.
// Remarks: Stable (16.4.6.8).
// [Note 1: Each element in the range [ret,last), where ret is the returned value, has a valid but unspecified state, because the algorithms can eliminate elements by moving from elements that were originally in that range.
template<class InputIterator, class OutputIterator, class T>
constexpr OutputIterator
remove_copy(InputIterator first, InputIterator last,
OutputIterator result, const T& value);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2,
class T>
ForwardIterator2
remove_copy(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result, const T& value);
template<class InputIterator, class OutputIterator, class Predicate>
constexpr OutputIterator
remove_copy_if(InputIterator first, InputIterator last,
OutputIterator result, Predicate pred);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2,
class Predicate>
ForwardIterator2
remove_copy_if(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result, Predicate pred);
template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class T,
class Proj = identity>
requires indirectly_copyable<I, O> &&
indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T*>
constexpr ranges::remove_copy_result<I, O>
ranges::remove_copy(I first, S last, O result, const T& value, Proj proj = {});
template<input_range R, weakly_incrementable O, class T, class Proj = identity>
requires indirectly_copyable<iterator_t<R>, O> &&
indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T*>
constexpr ranges::remove_copy_result<borrowed_iterator_t<R>, O>
ranges::remove_copy(R&& r, O result, const T& value, Proj proj = {});
template<input_iterator I, sentinel_for<I> S, weakly_incrementable O,
class Proj = identity, indirect_unary_predicate<projected<I, Proj>> Pred>
requires indirectly_copyable<I, O>
constexpr ranges::remove_copy_if_result<I, O>
ranges::remove_copy_if(I first, S last, O result, Pred pred, Proj proj = {});
template<input_range R, weakly_incrementable O, class Proj = identity,
indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
requires indirectly_copyable<iterator_t<R>, O>
constexpr ranges::remove_copy_if_result<borrowed_iterator_t<R>, O>
ranges::remove_copy_if(R&& r, O result, Pred pred, Proj proj = {});
// Let E be — bool(*i == value) for remove_copy;
// — bool(pred(*i)) for remove_copy_if;
// — bool(invoke(proj, *i) == value) for ranges::remove_copy;
// — bool(invoke(pred, invoke(proj, *i))) for ranges::remove_copy_if.
// Let N be the number of elements in [first, last) for which E is false.
// Mandates: *first is writable (25.3.1) to result.
// Preconditions: The ranges [first, last) and [result, result + (last - first)) do not overlap.
// [Note 2: For the overloads with an ExecutionPolicy, there might be a performance cost if iterator_-
traits<ForwardIterator1>::value_type does not meet the Cpp17MoveConstructible (Table 30) requirements.
// Effects: Copies all the elements referred to by the iterator i in the range [first, last) for which E is false.
// Returns: — result + N, for the algorithms in namespace std.
// — {last, result + N}, for the algorithms in namespace ranges.
// Complexity: Exactly last - first applications of the corresponding predicate and any projection. Remarks: Stable (16.4.6.8).
1 (1.1)
indirect_equivalence_relation<projected<iterator_t<R>, Proj>> C = ranges::equal_to>
requires permutable<iterator_t<R>>
constexpr borrowed_subrange_t<R>
ranges::unique(R&& r, C comp = {}, Proj proj = {});
// Let pred be equal_to{} for the overloads with no parameter pred, and let E be — bool(pred(*(i - 1), *i)) for the overloads in namespace std;
// 27.7.9 Unique [alg.unique]
template<class ForwardIterator>
constexpr ForwardIterator unique(ForwardIterator first, ForwardIterator last);
template<class ExecutionPolicy, class ForwardIterator>
ForwardIterator unique(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last);
template<class ForwardIterator, class BinaryPredicate>
constexpr ForwardIterator unique(ForwardIterator first, ForwardIterator last,
BinaryPredicate pred);
template<class ExecutionPolicy, class ForwardIterator, class BinaryPredicate>
ForwardIterator unique(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last,
BinaryPredicate pred);
template<permutable I, sentinel_for<I> S, class Proj = identity,
indirect_equivalence_relation<projected<I, Proj>> C = ranges::equal_to>
constexpr subrange<I> ranges::unique(I first, S last, C comp = {}, Proj proj = {});
template<forward_range R, class Proj = identity,
// — bool(invoke(comp, invoke(proj, *(i - 1)), invoke(proj, *i))) for the overloads in namespace ranges.
// Preconditions: For the overloads in namepace std, pred is an equivalence relation and the type of *first meets the Cpp17MoveAssignable requirements (Table 32).
// Effects: For a nonempty range, eliminates all but the first element from every consecutive group of equivalent elements referred to by the iterator i in the range [first + 1, last) for which E is true.
// Returns: Let j be the end of the resulting range. Returns: — j for the overloads in namespace std.
— {j, last} for the overloads in namespace ranges.
// Complexity: For nonempty ranges, exactly (last - first) - 1 applications of the corresponding predicate and no more than twice as many applications of any projection.
indirect_equivalence_relation<projected<iterator_t<R>, Proj>> C = ranges::equal_to>
requires indirectly_copyable<iterator_t<R>, O> &&
(forward_iterator<iterator_t<R>> ||
(input_iterator<O> && same_as<range_value_t<R>, iter_value_t<O>>) ||
indirectly_copyable_storable<iterator_t<R>, O>)
constexpr ranges::unique_copy_result<borrowed_iterator_t<R>, O>
ranges::unique_copy(R&& r, O result, C comp = {}, Proj proj = {});
// Let pred be equal_to{} for the overloads in namespace std with no parameter pred, and let E be
// — bool(pred(*i, *(i - 1))) for the overloads in namespace std;
// — bool(invoke(comp, invoke(proj, *i), invoke(proj, *(i - 1)))) for the overloads in namespace ranges.
// Mandates: *first is writable (25.3.1) to result. Preconditions:
template<class InputIterator, class OutputIterator>
constexpr OutputIterator
unique_copy(InputIterator first, InputIterator last,
OutputIterator result);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>
ForwardIterator2
unique_copy(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result);
template<class InputIterator, class OutputIterator,
class BinaryPredicate>
constexpr OutputIterator
unique_copy(InputIterator first, InputIterator last,
OutputIterator result, BinaryPredicate pred);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2,
class BinaryPredicate>
ForwardIterator2
unique_copy(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result, BinaryPredicate pred);
template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Proj = identity,
indirect_equivalence_relation<projected<I, Proj>> C = ranges::equal_to>
requires indirectly_copyable<I, O> &&
(forward_iterator<I> ||
(input_iterator<O> && same_as<iter_value_t<I>, iter_value_t<O>>) ||
indirectly_copyable_storable<I, O>)
constexpr ranges::unique_copy_result<I, O>
ranges::unique_copy(I first, S last, O result, C comp = {}, Proj proj = {});
template<input_range R, weakly_incrementable O, class Proj = identity,
// — The ranges [first, last) and [result, result+(last-first)) do not overlap.
// — For the overloads in namespace std:
// — The comparison function is an equivalence relation.
// — For the overloads with no ExecutionPolicy, let T be the value type of InputIterator. If InputIterator meets the Cpp17ForwardIterator requirements, then there are no addi- tional requirements for T. Otherwise, if OutputIterator meets the Cpp17ForwardIterator requirements and its value type is the same as T, then T meets the Cpp17CopyAssignable
(Table 33) requirements. Otherwise, T meets both the Cpp17CopyConstructible (Table 31) and Cpp17CopyAssignable requirements.
// [Note 1: For the overloads with an ExecutionPolicy, there might be a performance cost if the value type of ForwardIterator1 does not meet both the Cpp17CopyConstructible and Cpp17CopyAssignable requirements.
// Effects: Copies only the first element from every consecutive group of equal elements referred to by the iterator i in the range [first, last) for which E holds.
Returns:
— result + N for the overloads in namespace std.
— {last, result + N} for the overloads in namespace ranges.
Complexity: Exactly last - first - 1 applications of the corresponding predicate and no more than twice as many applications of any projection.
// Preconditions: For the overloads in namespace std, BidirectionalIterator meets the Cpp17Value- Swappable requirements (16.4.4.3).
// Effects: For each non-negative integer i < (last - first) / 2, applies std::iter_swap, or ranges:: iter_swap for the overloads in namespace ranges, to all pairs of iterators first + i, (last - i) - 1.
// Returns: last for the overloads in namespace ranges. Complexity: Exactly (last - first)/2 swaps.
// 27.7.10 Reverse [alg.reverse]
template<class BidirectionalIterator>
constexpr void reverse(BidirectionalIterator first, BidirectionalIterator last);
template<class ExecutionPolicy, class BidirectionalIterator>
void reverse(ExecutionPolicy&& exec,
BidirectionalIterator first, BidirectionalIterator last);
template<bidirectional_iterator I, sentinel_for<I> S>
requires permutable<I>
constexpr I ranges::reverse(I first, S last);
template<bidirectional_range R>
requires permutable<iterator_t<R>>
constexpr borrowed_iterator_t<R> ranges::reverse(R&& r);
template<class BidirectionalIterator, class OutputIterator>
constexpr OutputIterator
reverse_copy(BidirectionalIterator first, BidirectionalIterator last,
OutputIterator result);
template<class ExecutionPolicy, class BidirectionalIterator, class ForwardIterator>
ForwardIterator
reverse_copy(ExecutionPolicy&& exec,
BidirectionalIterator first, BidirectionalIterator last,
ForwardIterator result);
template<bidirectional_iterator I, sentinel_for<I> S, weakly_incrementable O>
requires indirectly_copyable<I, O>
constexpr ranges::reverse_copy_result<I, O>
ranges::reverse_copy(I first, S last, O result);
template<bidirectional_range R, weakly_incrementable O>
requires indirectly_copyable<iterator_t<R>, O>
constexpr ranges::reverse_copy_result<borrowed_iterator_t<R>, O>
ranges::reverse_copy(R&& r, O result);
// Let N be last - first.
// Preconditions: The ranges [first,last) and [result,result + N) do not overlap.
// Effects: Copies the range [first,last) to the range [result,result + N) such that for every non- negative integer i < N the following assignment takes place: *(result + N - 1 - i) = *(first + i).
// Preconditions: [first, middle) and [middle, last) are valid ranges. For the overloads in namespace std, ForwardIterator meets the Cpp17ValueSwappable requirements (16.4.4.3), and the type of *first meets the Cpp17MoveConstructible (Table 30) and Cpp17MoveAssignable (Table 32) requirements.
// Effects: For each non-negative integer i < (last - first), places the element from the position first + i into position first + (i + (last - middle)) % (last - first).
// [Note 1: This is a left rotate. —end note] Returns:
// — first + (last - middle) for the overloads in namespace std.
// — {first + (last - middle), last} for the overload in namespace ranges. Complexity: At most last - first swaps.
// Returns:
// — result + N for the overloads in namespace std.
// — {last, result + N} for the overloads in namespace ranges.
Complexity: Exactly N assignments.
// 27.7.11 Rotate [alg.rotate]
template<class ForwardIterator>
constexpr ForwardIterator
rotate(ForwardIterator first, ForwardIterator middle, ForwardIterator last);
template<class ExecutionPolicy, class ForwardIterator>
ForwardIterator
rotate(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator middle, ForwardIterator last);
template<permutable I, sentinel_for<I> S>
constexpr subrange<I> ranges::rotate(I first, I middle, S last);
template<forward_range R>
requires permutable<iterator_t<R>>
constexpr borrowed_subrange_t<R> ranges::rotate(R&& r, iterator_t<R> middle);
Effects: Equivalent to: return ranges::rotate(ranges::begin(r), middle, ranges::end(r));
template<class ForwardIterator, class OutputIterator>
constexpr OutputIterator
rotate_copy(ForwardIterator first, ForwardIterator middle, ForwardIterator last,
OutputIterator result);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>
ForwardIterator2
rotate_copy(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 middle, ForwardIterator1 last,
ForwardIterator2 result);
template<forward_iterator I, sentinel_for<I> S, weakly_incrementable O>
requires indirectly_copyable<I, O>
constexpr ranges::rotate_copy_result<I, O>
ranges::rotate_copy(I first, I middle, S last, O result);
// Let N be last - first.
// Preconditions: [first,middle) and [middle,last) are valid ranges. The ranges [first,last) and
[result,result + N) do not overlap.
// Effects: Copies the range [first,last) to the range [result,result + N) such that for each non- negative integer i < N the following assignment takes place: *(result + i) = *(first + (i + (middle - first)) % N).
// Returns:— result + N for the overloads in namespace std.
// — {last, result + N} for the overload in namespace ranges.
// Complexity: Exactly N assignments.
indirectly_copyable<iterator_t<R>, O> &&
uniform_random_bit_generator<remove_reference_t<Gen>>
O ranges::sample(R&& r, O out, range_difference_t<R> n, Gen&& g);
// Mandates: For the overload in namespace std, Distance is an integer type and *first is writable (25.3.1) to out.
// Preconditions: out is not in the range [first, last). For the overload in namespace std:
// — PopulationIterator meets the Cpp17InputIterator requirements (25.3.5.3).
// — SampleIterator meets the Cpp17OutputIterator requirements (25.3.5.4).
// — SampleIterator meets the Cpp17RandomAccessIterator requirements (25.3.5.7) unless Populat- ionIterator meets the Cpp17ForwardIterator requirements (25.3.5.5).
// — remove_reference_t<UniformRandomBitGenerator> meets the requirements of a uniform ran- dom bit generator type (28.5.3.3).
// Effects: Copies min(last - first, n) elements (the sample) from [first,last) (the population) to out such that each possible sample has equal probability of appearance.
// [Note 1: Algorithms that obtain such effects include selection sampling and reservoir sampling. —end note] Returns: The end of the resulting sample range.
// Complexity: O(last - first).
// Remarks:
template<forward_range R, weakly_incrementable O>
requires indirectly_copyable<iterator_t<R>, O>
constexpr ranges::rotate_copy_result<borrowed_iterator_t<R>, O>
ranges::rotate_copy(R&& r, iterator_t<R> middle, O result);
// Effects: Equivalent to:
return ranges::rotate_copy(ranges::begin(r), middle, ranges::end(r), result);
// 27.7.12 Sample [alg.random.sample]
template<class PopulationIterator, class SampleIterator,
class Distance, class UniformRandomBitGenerator>
SampleIterator sample(PopulationIterator first, PopulationIterator last,
SampleIterator out, Distance n,
UniformRandomBitGenerator&& g);
template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Gen>
requires (forward_iterator<I> || random_access_iterator<O>) &&
indirectly_copyable<I, O> &&
uniform_random_bit_generator<remove_reference_t<Gen>>
O ranges::sample(I first, S last, O out, iter_difference_t<I> n, Gen&& g);
template<input_range R, weakly_incrementable O, class Gen>
requires (forward_range<R> || random_access_iterator<O>) &&
// — For the overload in namespace std, stable if and only if PopulationIterator meets the Cpp17For- wardIterator requirements. For the first overload in namespace ranges, stable if and only if I models forward_iterator.
// — To the extent that the implementation of this function makes use of random numbers, the object g serves as the implementation’s source of randomness.
uniform_random_bit_generator<remove_reference_t<Gen>>
borrowed_iterator_t<R> ranges::shuffle(R&& r, Gen&& g);
Preconditions: For the overload in namespace std:
// Preconditions: n >= 0 is true. For the overloads in namespace std, the type of *first meets the Cpp17MoveAssignable requirements.
// Effects: If n == 0 or n >= last - first, does nothing. Otherwise, moves the element from position first + n + i into position first + i for each non-negative integer i < (last - first) - n. For the overloads without an ExecutionPolicy template parameter, does so in order starting from i = 0 and proceeding to i = (last - first) - n - 1.
Returns: Let NEW_LAST be first + (last - first - n) if n < last - first, otherwise first. — NEW_LAST for the overloads in namespace std.
// — {first, NEW_LAST } for the overloads in namespace ranges.
// 27.7.13 Shuffle [alg.random.shuffle]
template<class RandomAccessIterator, class UniformRandomBitGenerator>
void shuffle(RandomAccessIterator first,
RandomAccessIterator last,
UniformRandomBitGenerator&& g);
template<random_access_iterator I, sentinel_for<I> S, class Gen>
requires permutable<I> &&
uniform_random_bit_generator<remove_reference_t<Gen>>
I ranges::shuffle(I first, S last, Gen&& g);
template<random_access_range R, class Gen>
requires permutable<iterator_t<R>> &&
// — RandomAccessIterator meets the Cpp17ValueSwappable requirements (16.4.4.3).
// — The type remove_reference_t<UniformRandomBitGenerator> meets the uniform random bit generator (28.5.3.3) requirements.
// Effects: Permutes the elements in the range [first, last) such that each possible permutation of those elements has equal probability of appearance.
// Returns: last for the overloads in namespace ranges. Complexity: Exactly (last - first) - 1 swaps.
// Remarks: To the extent that the implementation of this function makes use of random numbers, the object referenced by g shall serve as the implementation’s source of randomness.
// 27.7.14 Shift [alg.shift]
template<class ForwardIterator>
constexpr ForwardIterator
shift_left(ForwardIterator first, ForwardIterator last,
typename iterator_traits<ForwardIterator>::difference_type n);
template<class ExecutionPolicy, class ForwardIterator>
ForwardIterator
shift_left(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last,
typename iterator_traits<ForwardIterator>::difference_type n);
template<permutable I, sentinel_for<I> S>
constexpr subrange<I> ranges::shift_left(I first, S last, iter_difference_t<I> n);
template<forward_range R>
requires permutable<iterator_t<R>>
constexpr borrowed_subrange_t<R> ranges::shift_left(R&& r, range_difference_t<R> n)
// Preconditions: n >= 0 is true. For the overloads in namespace std, the type of *first meets the Cpp17MoveAssignable requirements, and ForwardIterator meets the Cpp17BidirectionalIterator requirements (25.3.5.6) or the Cpp17ValueSwappable requirements.
// Effects: If n == 0 or n >= last - first, does nothing. Otherwise, moves the element from position first + i into position first + n + i for each non-negative integer i < (last - first) - n. Does soinorderstartingfromi = (last - first) - n - 1andproceedingtoi = 0if:
// — for the overload in namespace std without an ExecutionPolicy template parameter, Forward- Iterator meets the Cpp17BidirectionalIterator requirements,
// Complexity: At most (last - first) - n assignments.
template<class ForwardIterator>
constexpr ForwardIterator
shift_right(ForwardIterator first, ForwardIterator last,
typename iterator_traits<ForwardIterator>::difference_type n);
template<class ExecutionPolicy, class ForwardIterator>
ForwardIterator
shift_right(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last,
typename iterator_traits<ForwardIterator>::difference_type n);
template<permutable I, sentinel_for<I> S>
constexpr subrange<I> ranges::shift_right(I first, S last, iter_difference_t<I> n);
template<forward_range R>
requires permutable<iterator_t<R>>
constexpr borrowed_subrange_t<R> ranges::shift_right(R&& r, range_difference_t<R> n);
// — for the overloads in namespace ranges, I models bidirectional_iterator.
// Returns: Let NEW_FIRST be first + n if n < last - first, otherwise last.
// — NEW_FIRST for the overloads in namespace std.
// — {NEW_FIRST , last} for the overloads in namespace ranges.
// Complexity: At most (last - first) - n assignments or swaps.
int main(){
cout << n4910 << endl;
return EXIT_SUCCESS;
}
編纂・実行結果(compile and go)
$ clang++ p1205.cpp -std=03 -o p1205l -I. -Wall
In file included from p1205.cpp:10:
In file included from ./N4910.h:11:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/atomic:38:
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/c++0x_warning.h:32:2: error: This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
#error This file requires compiler and library support \
^
p1205.cpp:17:3: error: unknown type name 'constexpr'
constexpr OutputIterator copy(InputIterator first, InputIterator last,
^
p1205.cpp:17:13: warning: variable templates are a C++14 extension [-Wc++14-extensions]
constexpr OutputIterator copy(InputIterator first, InputIterator last,
^
p1205.cpp:17:27: error: expected ';' at end of declaration
constexpr OutputIterator copy(InputIterator first, InputIterator last,
^
;
p1205.cpp:17:33: error: unknown type name 'InputIterator'
constexpr OutputIterator copy(InputIterator first, InputIterator last,
^
p1205.cpp:17:54: error: unknown type name 'InputIterator'
constexpr OutputIterator copy(InputIterator first, InputIterator last,
^
p1205.cpp:18:33: error: unknown type name 'OutputIterator'
OutputIterator result);
^
p1205.cpp:17:28: error: C++ requires a type specifier for all declarations
constexpr OutputIterator copy(InputIterator first, InputIterator last,
^
p1205.cpp:19:10: error: unknown type name 'input_iterator'
template<input_iterator I, sentinel_for<I> S, weakly_incrementable O>
^
p1205.cpp:19:28: error: no template named 'sentinel_for'
template<input_iterator I, sentinel_for<I> S, weakly_incrementable O>
^
p1205.cpp:19:47: error: unknown type name 'weakly_incrementable'
template<input_iterator I, sentinel_for<I> S, weakly_incrementable O>
^
p1205.cpp:20:3: error: unknown type name 'requires'
requires indirectly_copyable<I, O>
^
p1205.cpp:20:12: error: no variable template matches partial specialization
requires indirectly_copyable<I, O>
^
p1205.cpp:20:37: error: expected ';' at end of declaration
requires indirectly_copyable<I, O>
^
;
p1205.cpp:21:3: error: unknown type name 'constexpr'
constexpr ranges::copy_result<I, O> ranges::copy(I first, S last, O result);
^
p1205.cpp:21:13: error: use of undeclared identifier 'ranges'
constexpr ranges::copy_result<I, O> ranges::copy(I first, S last, O result);
^
p1205.cpp:22:10: error: unknown type name 'input_range'
template<input_range R, weakly_incrementable O>
^
p1205.cpp:22:25: error: unknown type name 'weakly_incrementable'
template<input_range R, weakly_incrementable O>
^
p1205.cpp:23:3: error: unknown type name 'requires'
requires indirectly_copyable<iterator_t<R>, O>
^
p1205.cpp:23:32: error: use of undeclared identifier 'iterator_t'
requires indirectly_copyable<iterator_t<R>, O>
^
p1205.cpp:33:40: warning: rvalue references are a C++11 extension [-Wc++11-extensions]
ForwardIterator2 copy(ExecutionPolicy&& policy,
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
2 warnings and 20 errors generated.
$ clang++ p1205.cpp -std=2b -o p1205l -I. -Wall
p1205.cpp:21:47: error: redefinition of 'copy' as different kind of symbol
constexpr ranges::copy_result<I, O> ranges::copy(I first, S last, O result);
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/ranges_algobase.h:321:30: note: previous definition is here
inline constexpr __copy_fn copy{};
^
p1205.cpp:22:10: error: unknown type name 'input_range'
template<input_range R, weakly_incrementable O>
^
p1205.cpp:23:32: error: use of undeclared identifier 'iterator_t'
requires indirectly_copyable<iterator_t<R>, O>
^
p1205.cpp:38:1: error: unknown type name 'Complexity'
Complexity: Exactly last - first assignments.
^
p1205.cpp:38:11: error: expected unqualified-id
Complexity: Exactly last - first assignments.
^
p1205.cpp:51:43: error: use of undeclared identifier 'iterator_t'
indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
^
p1205.cpp:63:1: error: expected unqualified-id
requires indirectly_copyable<iterator_t<R>, I>
^
p1205.cpp:80:21: error: no template named 'copy_if_result' in namespace 'std::ranges'; did you mean 'copy_n_result'?
constexpr ranges::copy_if_result<I, O>
~~~~~~~~^~~~~~~~~~~~~~
copy_n_result
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/ranges_algobase.h:492:5: note: 'copy_n_result' declared here
using copy_n_result = in_out_result<_Iter, _Out>;
^
p1205.cpp:81:13: error: out-of-line declaration of 'copy_if' does not match any declaration in namespace 'std::ranges'
ranges::copy_if(I first, S last, O result, Pred pred, Proj proj = {});
^~~~~~~
p1205.cpp:82:10: error: unknown type name 'input_range'
template<input_range R, weakly_incrementable O, class Proj = identity,
^
p1205.cpp:84:3: error: template template parameter requires 'class' or 'typename' after the parameter list
constexpr BidirectionalIterator2
^
p1205.cpp:84:3: error: expected identifier
p1205.cpp:87:49: error: expected ',' or '>' in template-parameter-list
BidirectionalIterator2 result);
^
p1205.cpp:87:49: error: declaration does not declare anything
p1205.cpp:91:13: error: redefinition of 'copy_backward' as different kind of symbol
ranges::copy_backward(I1 first, S1 last, I2 result);
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/ranges_algobase.h:464:39: note: previous definition is here
inline constexpr __copy_backward_fn copy_backward{};
^
p1205.cpp:92:10: error: unknown type name 'bidirectional_range'
template<bidirectional_range R, bidirectional_iterator I>
^
p1205.cpp:92:1: error: extraneous template parameter list in template specialization or out-of-line template definition
template<bidirectional_range R, bidirectional_iterator I>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:104:13: error: redefinition of 'move' as different kind of symbol
ranges::move(I first, S last, O result);
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/ranges_algobase.h:346:30: note: previous definition is here
inline constexpr __move_fn move{};
^
p1205.cpp:105:10: error: unknown type name 'input_range'
template<input_range R, weakly_incrementable O>
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
$ g++ p1205.cpp -std=03 -o p1205g -I. -Wall
In file included from /usr/local/include/c++/12.1.0/atomic:38,
from N4910.h:11,
from p1205.cpp:10:
/usr/local/include/c++/12.1.0/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
32 | #error This file requires compiler and library support \
| ^~~~~
p1205.cpp:17:3: warning: identifier 'constexpr' is a keyword in C++11 [-Wc++11-compat]
17 | constexpr OutputIterator copy(InputIterator first, InputIterator last,
| ^~~~~~~~~
p1205.cpp:17:3: error: 'constexpr' does not name a type
p1205.cpp:17:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:19:10: error: 'input_iterator' has not been declared
19 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O>
| ^~~~~~~~~~~~~~
p1205.cpp:19:28: error: 'sentinel_for' has not been declared
19 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O>
| ^~~~~~~~~~~~
p1205.cpp:19:40: error: expected '>' before '<' token
19 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O>
| ^
p1205.cpp:20:3: error: 'requires' does not name a type
20 | requires indirectly_copyable<I, O>
| ^~~~~~~~
p1205.cpp:20:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:22:10: error: 'input_range' has not been declared
22 | template<input_range R, weakly_incrementable O>
| ^~~~~~~~~~~
p1205.cpp:22:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:22:25: error: 'weakly_incrementable' has not been declared
22 | template<input_range R, weakly_incrementable O>
| ^~~~~~~~~~~~~~~~~~~~
p1205.cpp:23:3: error: 'requires' does not name a type
23 | requires indirectly_copyable<iterator_t<R>, O>
| ^~~~~~~~
p1205.cpp:23:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:33:40: error: expected ',' or '...' before '&&' token
33 | ForwardIterator2 copy(ExecutionPolicy&& policy,
| ^~
p1205.cpp:38:11: error: found ':' in nested-name-specifier, expected '::'
38 | Complexity: Exactly last - first assignments.
| ^
| ::
p1205.cpp:38:1: error: 'Complexity' does not name a type
38 | Complexity: Exactly last - first assignments.
| ^~~~~~~~~~
p1205.cpp:43:42: error: expected ',' or '...' before '&&' token
43 | ForwardIterator2 copy_n(ExecutionPolicy&& exec,
| ^~
p1205.cpp:46:10: error: 'input_iterator' has not been declared
46 | template<input_iterator I, weakly_incrementable O>
| ^~~~~~~~~~~~~~
p1205.cpp:46:28: error: 'weakly_incrementable' has not been declared
46 | template<input_iterator I, weakly_incrementable O>
| ^~~~~~~~~~~~~~~~~~~~
p1205.cpp:47:3: error: 'requires' does not name a type
47 | requires indirectly_copyable<I, O>
| ^~~~~~~~
p1205.cpp:47:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:54:61: error: expected unqualified-id before ')' token
54 | ranges::copy_if(R&& r, O result, Pred pred, Proj proj = {});
| ^
p1205.cpp:63:1: error: 'requires' does not name a type
63 | requires indirectly_copyable<iterator_t<R>, I>
| ^~~~~~~~
p1205.cpp:63:1: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:70:3: error: 'constexpr' does not name a type
70 | constexpr OutputIterator copy_if(InputIterator first, InputIterator last,
| ^~~~~~~~~
p1205.cpp:70:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:74:43: error: expected ',' or '...' before '&&' token
74 | ForwardIterator2 copy_if(ExecutionPolicy&& exec,
| ^~
p1205.cpp:77:10: error: 'input_iterator' has not been declared
77 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Proj = identity,
| ^~~~~~~~~~~~~~
p1205.cpp:77:28: error: 'sentinel_for' has not been declared
77 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Proj = identity,
| ^~~~~~~~~~~~
p1205.cpp:77:40: error: expected '>' before '<' token
77 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Proj = identity,
| ^
p1205.cpp:81:71: error: expected unqualified-id before '{' token
81 | ranges::copy_if(I first, S last, O result, Pred pred, Proj proj = {});
| ^
p1205.cpp:81:73: error: expected unqualified-id before ')' token
81 | ranges::copy_if(I first, S last, O result, Pred pred, Proj proj = {});
| ^
p1205.cpp:82:10: error: 'input_range' has not been declared
82 | template<input_range R, weakly_incrementable O, class Proj = identity,
| ^~~~~~~~~~~
p1205.cpp:82:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:82:25: error: 'weakly_incrementable' has not been declared
82 | template<input_range R, weakly_incrementable O, class Proj = identity,
| ^~~~~~~~~~~~~~~~~~~~
p1205.cpp:82:62: error: 'identity' does not name a type
82 | template<input_range R, weakly_incrementable O, class Proj = identity,
| ^~~~~~~~
p1205.cpp:84:3: error: expected 'class' or 'typename' before 'constexpr'
84 | constexpr BidirectionalIterator2
| ^~~~~~~~~
p1205.cpp:84:13: error: expected '>' before 'BidirectionalIterator2'
84 | constexpr BidirectionalIterator2
| ^~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:87:49: error: expected unqualified-id before ';' token
87 | BidirectionalIterator2 result);
| ^
p1205.cpp:88:10: error: 'bidirectional_iterator' has not been declared
88 | template<bidirectional_iterator I1, sentinel_for<I1> S1, bidirectional_iterator I2>
| ^~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:88:37: error: 'sentinel_for' has not been declared
88 | template<bidirectional_iterator I1, sentinel_for<I1> S1, bidirectional_iterator I2>
| ^~~~~~~~~~~~
p1205.cpp:88:49: error: expected '>' before '<' token
88 | template<bidirectional_iterator I1, sentinel_for<I1> S1, bidirectional_iterator I2>
| ^
p1205.cpp:89:3: error: 'requires' does not name a type
89 | requires indirectly_copyable<I1, I2>
| ^~~~~~~~
p1205.cpp:89:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:92:10: error: 'bidirectional_range' has not been declared
92 | template<bidirectional_range R, bidirectional_iterator I>
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:92:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:92:33: error: 'bidirectional_iterator' has not been declared
92 | template<bidirectional_range R, bidirectional_iterator I>
| ^~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:99:3: error: 'constexpr' does not name a type
99 | constexpr OutputIterator move(InputIterator first, InputIterator last,
| ^~~~~~~~~
p1205.cpp:99:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:101:10: error: 'input_iterator' has not been declared
101 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O>
| ^~~~~~~~~~~~~~
p1205.cpp:101:28: error: 'sentinel_for' has not been declared
101 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O>
| ^~~~~~~~~~~~
p1205.cpp:101:40: error: expected '>' before '<' token
101 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O>
| ^
p1205.cpp:102:3: error: 'requires' does not name a type
102 | requires indirectly_movable<I, O>
| ^~~~~~~~
p1205.cpp:102:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:105:10: error: 'input_range' has not been declared
105 | template<input_range R, weakly_incrementable O>
| ^~~~~~~~~~~
p1205.cpp:105:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:105:25: error: 'weakly_incrementable' has not been declared
105 | template<input_range R, weakly_incrementable O>
| ^~~~~~~~~~~~~~~~~~~~
p1205.cpp:106:3: error: 'requires' does not name a type
106 | requires indirectly_movable<iterator_t<R>, O>
| ^~~~~~~~
p1205.cpp:106:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:118:40: error: expected ',' or '...' before '&&' token
118 | ForwardIterator2 move(ExecutionPolicy&& policy,
| ^~
p1205.cpp:127:3: error: 'constexpr' does not name a type
127 | constexpr BidirectionalIterator2
| ^~~~~~~~~
p1205.cpp:127:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:130:10: error: 'bidirectional_iterator' has not been declared
130 | template<bidirectional_iterator I1, sentinel_for<I1> S1, bidirectional_iterator I2>
| ^~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:130:37: error: 'sentinel_for' has not been declared
130 | template<bidirectional_iterator I1, sentinel_for<I1> S1, bidirectional_iterator I2>
| ^~~~~~~~~~~~
p1205.cpp:130:49: error: expected '>' before '<' token
130 | template<bidirectional_iterator I1, sentinel_for<I1> S1, bidirectional_iterator I2>
| ^
p1205.cpp:131:3: error: 'requires' does not name a type
131 | requires indirectly_movable<I1, I2>
| ^~~~~~~~
p1205.cpp:131:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:134:10: error: 'bidirectional_range' has not been declared
134 | template<bidirectional_range R, bidirectional_iterator I>
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:134:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:134:33: error: 'bidirectional_iterator' has not been declared
134 | template<bidirectional_range R, bidirectional_iterator I>
| ^~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:135:3: error: 'requires' does not name a type
135 | requires indirectly_movable<iterator_t<R>, I>
| ^~~~~~~~
p1205.cpp:135:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:143:1: error: 'requires' does not name a type
143 | requires indirectly_swappable<iterator_t<R1>, iterator_t<R2>>
| ^~~~~~~~
p1205.cpp:143:1: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:160:3: error: 'constexpr' does not name a type
160 | constexpr ForwardIterator2
| ^~~~~~~~~
p1205.cpp:160:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:165:32: error: expected ',' or '...' before '&&' token
165 | swap_ranges(ExecutionPolicy&& exec,
| ^~
p1205.cpp:168:10: error: 'input_iterator' has not been declared
168 | template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2>
| ^~~~~~~~~~~~~~
p1205.cpp:168:29: error: 'sentinel_for' has not been declared
168 | template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2>
| ^~~~~~~~~~~~
p1205.cpp:168:41: error: expected '>' before '<' token
168 | template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2>
| ^
p1205.cpp:169:3: error: 'requires' does not name a type
169 | requires indirectly_swappable<I1, I2>
| ^~~~~~~~
p1205.cpp:169:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:172:10: error: 'input_range' has not been declared
172 | template<input_range R1, input_range R2>
| ^~~~~~~~~~~
p1205.cpp:172:26: error: 'input_range' has not been declared
172 | template<input_range R1, input_range R2>
| ^~~~~~~~~~~
p1205.cpp:173:1: error: 'requires' does not name a type
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^~~~~~~~
p1205.cpp:173:1: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:177:50: error: expected unqualified-id before ',' token
177 | F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {});
| ^
p1205.cpp:177:58: error: expected constructor, destructor, or type conversion before 'proj2'
177 | F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {});
| ^~~~~
p1205.cpp:177:68: error: expected unqualified-id before ')' token
177 | F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {});
| ^
p1205.cpp:180:6: error: 'constexpr' does not name a type
180 | constexpr void iter_swap(ForwardIterator1 a, ForwardIterator2 b);
| ^~~~~~~~~
p1205.cpp:180:6: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:185:3: error: 'constexpr' does not name a type
185 | constexpr OutputIterator
| ^~~~~~~~~
p1205.cpp:185:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:191:30: error: expected ',' or '...' before '&&' token
191 | transform(ExecutionPolicy&& exec,
| ^~
p1205.cpp:196:3: error: 'constexpr' does not name a type
196 | constexpr OutputIterator
| ^~~~~~~~~
p1205.cpp:196:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:203:30: error: expected ',' or '...' before '&&' token
203 | transform(ExecutionPolicy&& exec,
| ^~
p1205.cpp:207:10: error: 'input_iterator' has not been declared
207 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O,
| ^~~~~~~~~~~~~~
p1205.cpp:207:28: error: 'sentinel_for' has not been declared
207 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O,
| ^~~~~~~~~~~~
p1205.cpp:207:40: error: expected '>' before '<' token
207 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O,
| ^
p1205.cpp:209:3: error: 'requires' does not name a type
209 | requires indirectly_writable<O, indirect_result_t<F&, projected<I, Proj>>>
| ^~~~~~~~
p1205.cpp:209:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:211:72: error: expected unqualified-id before ')' token
211 | ranges::transform(I first1, S last1, O result, F op, Proj proj = {});
| ^
p1205.cpp:212:10: error: 'input_range' has not been declared
212 | template<input_range R, weakly_incrementable O, copy_constructible F,
| ^~~~~~~~~~~
p1205.cpp:212:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:212:25: error: 'weakly_incrementable' has not been declared
212 | template<input_range R, weakly_incrementable O, copy_constructible F,
| ^~~~~~~~~~~~~~~~~~~~
p1205.cpp:212:49: error: 'copy_constructible' has not been declared
212 | template<input_range R, weakly_incrementable O, copy_constructible F,
| ^~~~~~~~~~~~~~~~~~
p1205.cpp:213:23: error: 'identity' does not name a type
213 | class Proj = identity>
| ^~~~~~~~
p1205.cpp:214:3: error: 'requires' does not name a type
214 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R>, Proj>>>
| ^~~~~~~~
p1205.cpp:214:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:216:60: error: expected unqualified-id before ')' token
216 | ranges::transform(R&& r, O result, F op, Proj proj = {});
| ^
p1205.cpp:217:10: error: 'input_iterator' has not been declared
217 | template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2,
| ^~~~~~~~~~~~~~
p1205.cpp:217:29: error: 'sentinel_for' has not been declared
217 | template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2,
| ^~~~~~~~~~~~
p1205.cpp:217:41: error: expected '>' before '<' token
217 | template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2,
| ^
p1205.cpp:220:3: error: 'requires' does not name a type
220 | requires indirectly_writable<O, indirect_result_t<F&, projected<I1, Proj1>,
| ^~~~~~~~
p1205.cpp:220:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:224:52: error: expected unqualified-id before ',' token
224 | F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {});
| ^
p1205.cpp:224:60: error: expected constructor, destructor, or type conversion before 'proj2'
224 | F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {});
| ^~~~~
p1205.cpp:224:70: error: expected unqualified-id before ')' token
224 | F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {});
| ^
p1205.cpp:225:10: error: 'input_range' has not been declared
225 | template<input_range R1, input_range R2, weakly_incrementable O,
| ^~~~~~~~~~~
p1205.cpp:225:26: error: 'input_range' has not been declared
225 | template<input_range R1, input_range R2, weakly_incrementable O,
| ^~~~~~~~~~~
p1205.cpp:225:42: error: 'weakly_incrementable' has not been declared
225 | template<input_range R1, input_range R2, weakly_incrementable O,
| ^~~~~~~~~~~~~~~~~~~~
p1205.cpp:226:10: error: 'copy_constructible' has not been declared
226 | copy_constructible F, class Proj1 = identity, class Proj2 = identity>
| ^~~~~~~~~~~~~~~~~~
p1205.cpp:226:46: error: 'identity' does not name a type
226 | copy_constructible F, class Proj1 = identity, class Proj2 = identity>
| ^~~~~~~~
p1205.cpp:226:70: error: 'identity' does not name a type
226 | copy_constructible F, class Proj1 = identity, class Proj2 = identity>
| ^~~~~~~~
p1205.cpp:244:3: error: 'constexpr' does not name a type
244 | constexpr void replace(ForwardIterator first, ForwardIterator last,
| ^~~~~~~~~
p1205.cpp:244:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:247:31: error: expected ',' or '...' before '&&' token
247 | void replace(ExecutionPolicy&& exec,
| ^~
p1205.cpp:251:3: error: 'constexpr' does not name a type
251 | constexpr void replace_if(ForwardIterator first, ForwardIterator last,
| ^~~~~~~~~
p1205.cpp:251:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:254:34: error: expected ',' or '...' before '&&' token
254 | void replace_if(ExecutionPolicy&& exec,
| ^~
p1205.cpp:257:10: error: 'input_iterator' has not been declared
257 | template<input_iterator I, sentinel_for<I> S, class T1, class T2, class Proj = identity>
| ^~~~~~~~~~~~~~
p1205.cpp:257:28: error: 'sentinel_for' has not been declared
257 | template<input_iterator I, sentinel_for<I> S, class T1, class T2, class Proj = identity>
| ^~~~~~~~~~~~
p1205.cpp:257:40: error: expected '>' before '<' token
257 | template<input_iterator I, sentinel_for<I> S, class T1, class T2, class Proj = identity>
| ^
p1205.cpp:258:3: error: 'requires' does not name a type
258 | requires indirectly_writable<I, const T2&> &&
| ^~~~~~~~
p1205.cpp:258:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:261:94: error: expected unqualified-id before ')' token
261 | ranges::replace(I first, S last, const T1& old_value, const T2& new_value, Proj proj = {});
| ^
p1205.cpp:262:10: error: 'input_range' has not been declared
262 | template<input_range R, class T1, class T2, class Proj = identity>
| ^~~~~~~~~~~
p1205.cpp:262:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:262:58: error: 'identity' does not name a type
262 | template<input_range R, class T1, class T2, class Proj = identity>
| ^~~~~~~~
p1205.cpp:263:3: error: 'requires' does not name a type
263 | requires indirectly_writable<iterator_t<R>, const T2&> &&
| ^~~~~~~~
p1205.cpp:263:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:266:84: error: expected unqualified-id before ')' token
266 | ranges::replace(R&& r, const T1& old_value, const T2& new_value, Proj proj = {});
| ^
p1205.cpp:267:10: error: 'input_iterator' has not been declared
267 | template<input_iterator I, sentinel_for<I> S, class T, class Proj = identity,
| ^~~~~~~~~~~~~~
p1205.cpp:267:28: error: 'sentinel_for' has not been declared
267 | template<input_iterator I, sentinel_for<I> S, class T, class Proj = identity,
| ^~~~~~~~~~~~
p1205.cpp:267:40: error: expected '>' before '<' token
267 | template<input_iterator I, sentinel_for<I> S, class T, class Proj = identity,
| ^
p1205.cpp:270:94: error: expected unqualified-id before '{' token
270 | constexpr I ranges::replace_if(I first, S last, Pred pred, const T& new_value, Proj proj = {});
| ^
p1205.cpp:270:96: error: expected unqualified-id before ')' token
270 | constexpr I ranges::replace_if(I first, S last, Pred pred, const T& new_value, Proj proj = {});
| ^
p1205.cpp:271:10: error: 'input_range' has not been declared
271 | template<input_range R, class T, class Proj = identity,
| ^~~~~~~~~~~
p1205.cpp:271:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:271:47: error: 'identity' does not name a type
271 | template<input_range R, class T, class Proj = identity,
| ^~~~~~~~
p1205.cpp:272:10: error: 'indirect_unary_predicate' has not been declared
272 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:272:34: error: expected '>' before '<' token
272 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^
p1205.cpp:275:74: error: expected unqualified-id before '{' token
275 | ranges::replace_if(R&& r, Pred pred, const T& new_value, Proj proj = {});
| ^
p1205.cpp:275:76: error: expected unqualified-id before ')' token
275 | ranges::replace_if(R&& r, Pred pred, const T& new_value, Proj proj = {});
| ^
p1205.cpp:285:3: error: 'constexpr' does not name a type
285 | constexpr OutputIterator
| ^~~~~~~~~
p1205.cpp:285:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:291:33: error: expected ',' or '...' before '&&' token
291 | replace_copy(ExecutionPolicy&& exec,
| ^~
p1205.cpp:296:3: error: 'constexpr' does not name a type
296 | constexpr OutputIterator
| ^~~~~~~~~
p1205.cpp:296:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:303:36: error: expected ',' or '...' before '&&' token
303 | replace_copy_if(ExecutionPolicy&& exec,
| ^~
p1205.cpp:307:10: error: 'input_iterator' has not been declared
307 | template<input_iterator I, sentinel_for<I> S, class T1, class T2, output_iterator<const T2&> O,
| ^~~~~~~~~~~~~~
p1205.cpp:307:28: error: 'sentinel_for' has not been declared
307 | template<input_iterator I, sentinel_for<I> S, class T1, class T2, output_iterator<const T2&> O,
| ^~~~~~~~~~~~
p1205.cpp:307:40: error: expected '>' before '<' token
307 | template<input_iterator I, sentinel_for<I> S, class T1, class T2, output_iterator<const T2&> O,
| ^
p1205.cpp:309:3: error: 'requires' does not name a type
309 | requires indirectly_copyable<I, O> &&
| ^~~~~~~~
p1205.cpp:309:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:313:40: error: expected unqualified-id before ')' token
313 | Proj proj = {});
| ^
p1205.cpp:314:10: error: 'input_range' has not been declared
314 | template<input_range R, class T1, class T2, output_iterator<const T2&> O,
| ^~~~~~~~~~~
p1205.cpp:314:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:314:45: error: 'output_iterator' has not been declared
314 | template<input_range R, class T1, class T2, output_iterator<const T2&> O,
| ^~~~~~~~~~~~~~~
p1205.cpp:314:60: error: expected '>' before '<' token
314 | template<input_range R, class T1, class T2, output_iterator<const T2&> O,
| ^
p1205.cpp:316:3: error: 'requires' does not name a type
316 | requires indirectly_copyable<iterator_t<R>, O> &&
| ^~~~~~~~
p1205.cpp:316:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:320:40: error: expected unqualified-id before ')' token
320 | Proj proj = {});
| ^
p1205.cpp:321:10: error: 'input_iterator' has not been declared
321 | template<input_iterator I, sentinel_for<I> S, class T, output_iterator<const T&> O,
| ^~~~~~~~~~~~~~
p1205.cpp:321:28: error: 'sentinel_for' has not been declared
321 | template<input_iterator I, sentinel_for<I> S, class T, output_iterator<const T&> O,
| ^~~~~~~~~~~~
p1205.cpp:321:40: error: expected '>' before '<' token
321 | template<input_iterator I, sentinel_for<I> S, class T, output_iterator<const T&> O,
| ^
p1205.cpp:326:41: error: expected unqualified-id before '{' token
326 | Proj proj = {});
| ^
p1205.cpp:326:43: error: expected unqualified-id before ')' token
326 | Proj proj = {});
| ^
p1205.cpp:327:10: error: 'input_range' has not been declared
327 | template<input_range R, class T, output_iterator<const T&> O, class Proj = identity,
| ^~~~~~~~~~~
p1205.cpp:327:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:327:34: error: 'output_iterator' has not been declared
327 | template<input_range R, class T, output_iterator<const T&> O, class Proj = identity,
| ^~~~~~~~~~~~~~~
p1205.cpp:327:49: error: expected '>' before '<' token
327 | template<input_range R, class T, output_iterator<const T&> O, class Proj = identity,
| ^
p1205.cpp:332:41: error: expected unqualified-id before '{' token
332 | Proj proj = {});
| ^
p1205.cpp:332:43: error: expected unqualified-id before ')' token
332 | Proj proj = {});
| ^
p1205.cpp:348:3: error: 'constexpr' does not name a type
348 | constexpr void fill(ForwardIterator first, ForwardIterator last, const T& value);
| ^~~~~~~~~
p1205.cpp:348:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:350:28: error: expected ',' or '...' before '&&' token
350 | void fill(ExecutionPolicy&& exec,
| ^~
p1205.cpp:353:3: error: 'constexpr' does not name a type
353 | constexpr OutputIterator fill_n(OutputIterator first, Size n, const T& value);
| ^~~~~~~~~
p1205.cpp:353:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:355:41: error: expected ',' or '...' before '&&' token
355 | ForwardIterator fill_n(ExecutionPolicy&& exec,
| ^~
p1205.cpp:357:19: error: 'output_iterator' has not been declared
357 | template<class T, output_iterator<const T&> O, sentinel_for<O> S>
| ^~~~~~~~~~~~~~~
p1205.cpp:357:34: error: expected '>' before '<' token
357 | template<class T, output_iterator<const T&> O, sentinel_for<O> S>
| ^
p1205.cpp:358:3: error: 'constexpr' does not name a type
358 | constexpr O ranges::fill(O first, S last, const T& value);
| ^~~~~~~~~
p1205.cpp:358:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:359:19: error: 'output_range' has not been declared
359 | template<class T, output_range<const T&> R>
| ^~~~~~~~~~~~
p1205.cpp:359:31: error: expected '>' before '<' token
359 | template<class T, output_range<const T&> R>
| ^
p1205.cpp:360:3: error: 'constexpr' does not name a type
360 | constexpr borrowed_iterator_t<R> ranges::fill(R&& r, const T& value);
| ^~~~~~~~~
p1205.cpp:360:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:361:19: error: 'output_iterator' has not been declared
361 | template<class T, output_iterator<const T&> O>
| ^~~~~~~~~~~~~~~
p1205.cpp:361:34: error: expected '>' before '<' token
361 | template<class T, output_iterator<const T&> O>
| ^
p1205.cpp:362:3: error: 'constexpr' does not name a type
362 | constexpr O ranges::fill_n(O first, iter_difference_t<O> n, const T& value);
| ^~~~~~~~~
p1205.cpp:362:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:365:3: error: 'constexpr' does not name a type
365 | constexpr void generate(ForwardIterator first, ForwardIterator last,
| ^~~~~~~~~
p1205.cpp:365:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:368:32: error: expected ',' or '...' before '&&' token
368 | void generate(ExecutionPolicy&& exec,
| ^~
p1205.cpp:372:3: error: 'constexpr' does not name a type
372 | constexpr OutputIterator generate_n(OutputIterator first, Size n, Generator gen);
| ^~~~~~~~~
p1205.cpp:372:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:374:45: error: expected ',' or '...' before '&&' token
374 | ForwardIterator generate_n(ExecutionPolicy&& exec,
| ^~
p1205.cpp:376:10: error: 'input_or_output_iterator' has not been declared
376 | template<input_or_output_iterator O, sentinel_for<O> S, copy_constructible F>
| ^~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:376:38: error: 'sentinel_for' has not been declared
376 | template<input_or_output_iterator O, sentinel_for<O> S, copy_constructible F>
| ^~~~~~~~~~~~
p1205.cpp:376:50: error: expected '>' before '<' token
376 | template<input_or_output_iterator O, sentinel_for<O> S, copy_constructible F>
| ^
p1205.cpp:377:3: error: 'requires' does not name a type
377 | requires invocable<F&> && indirectly_writable<O, invoke_result_t<F&>>
| ^~~~~~~~
p1205.cpp:377:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:14:11: error: expected identifier before 'int'
14 | #define R int
| ^~~
p1205.cpp:379:16: note: in expansion of macro 'R'
379 | template<class R, copy_constructible F>
| ^
p1205.cpp:379:10: error: two or more data types in declaration of 'parameter'
379 | template<class R, copy_constructible F>
| ^~~~~
p1205.cpp:379:19: error: 'copy_constructible' has not been declared
379 | template<class R, copy_constructible F>
| ^~~~~~~~~~~~~~~~~~
p1205.cpp:380:3: error: 'requires' does not name a type
380 | requires invocable<F&> && output_range<R, invoke_result_t<F&>>
| ^~~~~~~~
p1205.cpp:380:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:382:10: error: 'input_or_output_iterator' has not been declared
382 | template<input_or_output_iterator O, copy_constructible F>
| ^~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:382:38: error: 'copy_constructible' has not been declared
382 | template<input_or_output_iterator O, copy_constructible F>
| ^~~~~~~~~~~~~~~~~~
p1205.cpp:383:3: error: 'requires' does not name a type
383 | requires invocable<F&> && indirectly_writable<O, invoke_result_t<F&>>
| ^~~~~~~~
p1205.cpp:383:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:391:3: error: 'constexpr' does not name a type
391 | constexpr ForwardIterator remove(ForwardIterator first, ForwardIterator last,
| ^~~~~~~~~
p1205.cpp:391:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:394:41: error: expected ',' or '...' before '&&' token
394 | ForwardIterator remove(ExecutionPolicy&& exec,
| ^~
p1205.cpp:398:3: error: 'constexpr' does not name a type
398 | constexpr ForwardIterator remove_if(ForwardIterator first, ForwardIterator last,
| ^~~~~~~~~
p1205.cpp:398:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:401:44: error: expected ',' or '...' before '&&' token
401 | ForwardIterator remove_if(ExecutionPolicy&& exec,
| ^~
p1205.cpp:404:10: error: 'permutable' has not been declared
404 | template<permutable I, sentinel_for<I> S, class T, class Proj = identity>
| ^~~~~~~~~~
p1205.cpp:404:24: error: 'sentinel_for' has not been declared
404 | template<permutable I, sentinel_for<I> S, class T, class Proj = identity>
| ^~~~~~~~~~~~
p1205.cpp:404:36: error: expected '>' before '<' token
404 | template<permutable I, sentinel_for<I> S, class T, class Proj = identity>
| ^
p1205.cpp:405:3: error: 'requires' does not name a type
405 | requires indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T*>
| ^~~~~~~~
p1205.cpp:405:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:406:87: error: expected unqualified-id before ')' token
406 | constexpr subrange<I> ranges::remove(I first, S last, const T& value, Proj proj = {});
| ^
p1205.cpp:407:10: error: 'forward_range' has not been declared
407 | template<forward_range R, class T, class Proj = identity>
| ^~~~~~~~~~~~~
p1205.cpp:407:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:407:49: error: 'identity' does not name a type
407 | template<forward_range R, class T, class Proj = identity>
| ^~~~~~~~
p1205.cpp:408:3: error: 'requires' does not name a type
408 | requires permutable<iterator_t<R>> &&
| ^~~~~~~~
p1205.cpp:408:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:411:57: error: expected unqualified-id before ')' token
411 | ranges::remove(R&& r, const T& value, Proj proj = {});
| ^
p1205.cpp:412:10: error: 'permutable' has not been declared
412 | template<permutable I, sentinel_for<I> S, class Proj = identity,
| ^~~~~~~~~~
p1205.cpp:412:24: error: 'sentinel_for' has not been declared
412 | template<permutable I, sentinel_for<I> S, class Proj = identity,
| ^~~~~~~~~~~~
p1205.cpp:412:36: error: expected '>' before '<' token
412 | template<permutable I, sentinel_for<I> S, class Proj = identity,
| ^
p1205.cpp:414:83: error: expected unqualified-id before '{' token
414 | constexpr subrange<I> ranges::remove_if(I first, S last, Pred pred, Proj proj = {});
| ^
p1205.cpp:414:85: error: expected unqualified-id before ')' token
414 | constexpr subrange<I> ranges::remove_if(I first, S last, Pred pred, Proj proj = {});
| ^
p1205.cpp:415:10: error: 'forward_range' has not been declared
415 | template<forward_range R, class Proj = identity,
| ^~~~~~~~~~~~~
p1205.cpp:415:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:415:40: error: 'identity' does not name a type
415 | template<forward_range R, class Proj = identity,
| ^~~~~~~~
p1205.cpp:416:10: error: 'indirect_unary_predicate' has not been declared
416 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:416:34: error: expected '>' before '<' token
416 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^
p1205.cpp:419:53: error: expected unqualified-id before '{' token
419 | ranges::remove_if(R&& r, Pred pred, Proj proj = {});
| ^
p1205.cpp:419:55: error: expected unqualified-id before ')' token
419 | ranges::remove_if(R&& r, Pred pred, Proj proj = {});
| ^
p1205.cpp:433:3: error: 'constexpr' does not name a type
433 | constexpr OutputIterator
| ^~~~~~~~~
p1205.cpp:433:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:439:32: error: expected ',' or '...' before '&&' token
439 | remove_copy(ExecutionPolicy&& exec,
| ^~
p1205.cpp:443:3: error: 'constexpr' does not name a type
443 | constexpr OutputIterator
| ^~~~~~~~~
p1205.cpp:443:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:449:35: error: expected ',' or '...' before '&&' token
449 | remove_copy_if(ExecutionPolicy&& exec,
| ^~
p1205.cpp:452:10: error: 'input_iterator' has not been declared
452 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class T,
| ^~~~~~~~~~~~~~
p1205.cpp:452:28: error: 'sentinel_for' has not been declared
452 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class T,
| ^~~~~~~~~~~~
p1205.cpp:452:40: error: expected '>' before '<' token
452 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class T,
| ^
p1205.cpp:454:3: error: 'requires' does not name a type
454 | requires indirectly_copyable<I, O> &&
| ^~~~~~~~
p1205.cpp:454:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:457:82: error: expected unqualified-id before ')' token
457 | ranges::remove_copy(I first, S last, O result, const T& value, Proj proj = {});
| ^
p1205.cpp:458:10: error: 'input_range' has not been declared
458 | template<input_range R, weakly_incrementable O, class T, class Proj = identity>
| ^~~~~~~~~~~
p1205.cpp:458:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:458:25: error: 'weakly_incrementable' has not been declared
458 | template<input_range R, weakly_incrementable O, class T, class Proj = identity>
| ^~~~~~~~~~~~~~~~~~~~
p1205.cpp:458:71: error: 'identity' does not name a type
458 | template<input_range R, weakly_incrementable O, class T, class Proj = identity>
| ^~~~~~~~
p1205.cpp:459:3: error: 'requires' does not name a type
459 | requires indirectly_copyable<iterator_t<R>, O> &&
| ^~~~~~~~
p1205.cpp:459:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:462:72: error: expected unqualified-id before ')' token
462 | ranges::remove_copy(R&& r, O result, const T& value, Proj proj = {});
| ^
p1205.cpp:463:10: error: 'input_iterator' has not been declared
463 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O,
| ^~~~~~~~~~~~~~
p1205.cpp:463:28: error: 'sentinel_for' has not been declared
463 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O,
| ^~~~~~~~~~~~
p1205.cpp:463:40: error: expected '>' before '<' token
463 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O,
| ^
p1205.cpp:467:78: error: expected unqualified-id before '{' token
467 | ranges::remove_copy_if(I first, S last, O result, Pred pred, Proj proj = {});
| ^
p1205.cpp:467:80: error: expected unqualified-id before ')' token
467 | ranges::remove_copy_if(I first, S last, O result, Pred pred, Proj proj = {});
| ^
p1205.cpp:468:10: error: 'input_range' has not been declared
468 | template<input_range R, weakly_incrementable O, class Proj = identity,
| ^~~~~~~~~~~
p1205.cpp:468:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:468:25: error: 'weakly_incrementable' has not been declared
468 | template<input_range R, weakly_incrementable O, class Proj = identity,
| ^~~~~~~~~~~~~~~~~~~~
p1205.cpp:468:62: error: 'identity' does not name a type
468 | template<input_range R, weakly_incrementable O, class Proj = identity,
| ^~~~~~~~
p1205.cpp:469:10: error: 'indirect_unary_predicate' has not been declared
469 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:469:34: error: expected '>' before '<' token
469 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^
p1205.cpp:472:68: error: expected unqualified-id before '{' token
472 | ranges::remove_copy_if(R&& r, O result, Pred pred, Proj proj = {});
| ^
p1205.cpp:472:70: error: expected unqualified-id before ')' token
472 | ranges::remove_copy_if(R&& r, O result, Pred pred, Proj proj = {});
| ^
p1205.cpp:485:8: error: 'indirect_equivalence_relation' does not name a type
485 | indirect_equivalence_relation<projected<iterator_t<R>, Proj>> C = ranges::equal_to>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:488:36: error: expected unqualified-id before ',' token
488 | ranges::unique(R&& r, C comp = {}, Proj proj = {});
| ^
p1205.cpp:488:43: error: expected constructor, destructor, or type conversion before 'proj'
488 | ranges::unique(R&& r, C comp = {}, Proj proj = {});
| ^~~~
p1205.cpp:488:52: error: expected unqualified-id before ')' token
488 | ranges::unique(R&& r, C comp = {}, Proj proj = {});
| ^
p1205.cpp:492:3: error: 'constexpr' does not name a type
492 | constexpr ForwardIterator unique(ForwardIterator first, ForwardIterator last);
| ^~~~~~~~~
p1205.cpp:492:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:494:41: error: expected ',' or '...' before '&&' token
494 | ForwardIterator unique(ExecutionPolicy&& exec,
| ^~
p1205.cpp:497:3: error: 'constexpr' does not name a type
497 | constexpr ForwardIterator unique(ForwardIterator first, ForwardIterator last,
| ^~~~~~~~~
p1205.cpp:497:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:500:41: error: expected ',' or '...' before '&&' token
500 | ForwardIterator unique(ExecutionPolicy&& exec,
| ^~
p1205.cpp:503:10: error: 'permutable' has not been declared
503 | template<permutable I, sentinel_for<I> S, class Proj = identity,
| ^~~~~~~~~~
p1205.cpp:503:24: error: 'sentinel_for' has not been declared
503 | template<permutable I, sentinel_for<I> S, class Proj = identity,
| ^~~~~~~~~~~~
p1205.cpp:503:36: error: expected '>' before '<' token
503 | template<permutable I, sentinel_for<I> S, class Proj = identity,
| ^
p1205.cpp:505:66: error: expected unqualified-id before '{' token
505 | constexpr subrange<I> ranges::unique(I first, S last, C comp = {}, Proj proj = {});
| ^
p1205.cpp:505:68: error: expected unqualified-id before ',' token
505 | constexpr subrange<I> ranges::unique(I first, S last, C comp = {}, Proj proj = {});
| ^
p1205.cpp:505:75: error: expected constructor, destructor, or type conversion before 'proj'
505 | constexpr subrange<I> ranges::unique(I first, S last, C comp = {}, Proj proj = {});
| ^~~~
p1205.cpp:505:84: error: expected unqualified-id before ')' token
505 | constexpr subrange<I> ranges::unique(I first, S last, C comp = {}, Proj proj = {});
| ^
p1205.cpp:506:10: error: 'forward_range' has not been declared
506 | template<forward_range R, class Proj = identity,
| ^~~~~~~~~~~~~
p1205.cpp:506:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:506:40: error: 'identity' does not name a type
506 | template<forward_range R, class Proj = identity,
| ^~~~~~~~
p1205.cpp:513:8: error: 'indirect_equivalence_relation' has not been declared
513 | indirect_equivalence_relation<projected<iterator_t<R>, Proj>> C = ranges::equal_to>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:513:37: error: expected '>' before '<' token
513 | indirect_equivalence_relation<projected<iterator_t<R>, Proj>> C = ranges::equal_to>
| ^
p1205.cpp:519:49: error: expected unqualified-id before '{' token
519 | ranges::unique_copy(R&& r, O result, C comp = {}, Proj proj = {});
| ^
p1205.cpp:519:51: error: expected unqualified-id before ',' token
519 | ranges::unique_copy(R&& r, O result, C comp = {}, Proj proj = {});
| ^
p1205.cpp:519:58: error: expected constructor, destructor, or type conversion before 'proj'
519 | ranges::unique_copy(R&& r, O result, C comp = {}, Proj proj = {});
| ^~~~
p1205.cpp:519:67: error: expected unqualified-id before ')' token
519 | ranges::unique_copy(R&& r, O result, C comp = {}, Proj proj = {});
| ^
p1205.cpp:525:3: error: 'constexpr' does not name a type
525 | constexpr OutputIterator
| ^~~~~~~~~
p1205.cpp:525:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:530:32: error: expected ',' or '...' before '&&' token
530 | unique_copy(ExecutionPolicy&& exec,
| ^~
p1205.cpp:535:3: error: 'constexpr' does not name a type
535 | constexpr OutputIterator
| ^~~~~~~~~
p1205.cpp:535:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:541:32: error: expected ',' or '...' before '&&' token
541 | unique_copy(ExecutionPolicy&& exec,
| ^~
p1205.cpp:544:10: error: 'input_iterator' has not been declared
544 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Proj = identity,
| ^~~~~~~~~~~~~~
p1205.cpp:544:28: error: 'sentinel_for' has not been declared
544 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Proj = identity,
| ^~~~~~~~~~~~
p1205.cpp:544:40: error: expected '>' before '<' token
544 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Proj = identity,
| ^
p1205.cpp:551:61: error: expected unqualified-id before '{' token
551 | ranges::unique_copy(I first, S last, O result, C comp = {}, Proj proj = {});
| ^
p1205.cpp:551:63: error: expected unqualified-id before ',' token
551 | ranges::unique_copy(I first, S last, O result, C comp = {}, Proj proj = {});
| ^
p1205.cpp:551:70: error: expected constructor, destructor, or type conversion before 'proj'
551 | ranges::unique_copy(I first, S last, O result, C comp = {}, Proj proj = {});
| ^~~~
p1205.cpp:551:79: error: expected unqualified-id before ')' token
551 | ranges::unique_copy(I first, S last, O result, C comp = {}, Proj proj = {});
| ^
p1205.cpp:552:10: error: 'input_range' has not been declared
552 | template<input_range R, weakly_incrementable O, class Proj = identity,
| ^~~~~~~~~~~
p1205.cpp:552:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:552:25: error: 'weakly_incrementable' has not been declared
552 | template<input_range R, weakly_incrementable O, class Proj = identity,
| ^~~~~~~~~~~~~~~~~~~~
p1205.cpp:552:62: error: 'identity' does not name a type
552 | template<input_range R, weakly_incrementable O, class Proj = identity,
| ^~~~~~~~
p1205.cpp:568:3: error: expected 'class' or 'typename' before 'constexpr'
568 | constexpr void reverse(BidirectionalIterator first, BidirectionalIterator last);
| ^~~~~~~~~
p1205.cpp:568:13: error: expected '>' before 'void'
568 | constexpr void reverse(BidirectionalIterator first, BidirectionalIterator last);
| ^~~~
p1205.cpp:568:82: error: expected unqualified-id before ';' token
568 | constexpr void reverse(BidirectionalIterator first, BidirectionalIterator last);
| ^
p1205.cpp:570:31: error: expected ',' or '...' before '&&' token
570 | void reverse(ExecutionPolicy&& exec,
| ^~
p1205.cpp:572:10: error: 'bidirectional_iterator' has not been declared
572 | template<bidirectional_iterator I, sentinel_for<I> S>
| ^~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:572:36: error: 'sentinel_for' has not been declared
572 | template<bidirectional_iterator I, sentinel_for<I> S>
| ^~~~~~~~~~~~
p1205.cpp:572:48: error: expected '>' before '<' token
572 | template<bidirectional_iterator I, sentinel_for<I> S>
| ^
p1205.cpp:573:3: error: 'requires' does not name a type
573 | requires permutable<I>
| ^~~~~~~~
p1205.cpp:573:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:575:10: error: 'bidirectional_range' has not been declared
575 | template<bidirectional_range R>
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:575:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:576:3: error: 'requires' does not name a type
576 | requires permutable<iterator_t<R>>
| ^~~~~~~~
p1205.cpp:576:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:579:3: error: 'constexpr' does not name a type
579 | constexpr OutputIterator
| ^~~~~~~~~
p1205.cpp:579:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:584:33: error: expected ',' or '...' before '&&' token
584 | reverse_copy(ExecutionPolicy&& exec,
| ^~
p1205.cpp:587:10: error: 'bidirectional_iterator' has not been declared
587 | template<bidirectional_iterator I, sentinel_for<I> S, weakly_incrementable O>
| ^~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:587:36: error: 'sentinel_for' has not been declared
587 | template<bidirectional_iterator I, sentinel_for<I> S, weakly_incrementable O>
| ^~~~~~~~~~~~
p1205.cpp:587:48: error: expected '>' before '<' token
587 | template<bidirectional_iterator I, sentinel_for<I> S, weakly_incrementable O>
| ^
p1205.cpp:588:3: error: 'requires' does not name a type
588 | requires indirectly_copyable<I, O>
| ^~~~~~~~
p1205.cpp:588:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:591:10: error: 'bidirectional_range' has not been declared
591 | template<bidirectional_range R, weakly_incrementable O>
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:591:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:591:33: error: 'weakly_incrementable' has not been declared
591 | template<bidirectional_range R, weakly_incrementable O>
| ^~~~~~~~~~~~~~~~~~~~
p1205.cpp:592:3: error: 'requires' does not name a type
592 | requires indirectly_copyable<iterator_t<R>, O>
| ^~~~~~~~
p1205.cpp:592:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:609:3: error: 'constexpr' does not name a type
609 | constexpr ForwardIterator
| ^~~~~~~~~
p1205.cpp:609:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:613:27: error: expected ',' or '...' before '&&' token
613 | rotate(ExecutionPolicy&& exec,
| ^~
p1205.cpp:615:10: error: 'permutable' has not been declared
615 | template<permutable I, sentinel_for<I> S>
| ^~~~~~~~~~
p1205.cpp:615:24: error: 'sentinel_for' has not been declared
615 | template<permutable I, sentinel_for<I> S>
| ^~~~~~~~~~~~
p1205.cpp:615:36: error: expected '>' before '<' token
615 | template<permutable I, sentinel_for<I> S>
| ^
p1205.cpp:616:3: error: 'constexpr' does not name a type
616 | constexpr subrange<I> ranges::rotate(I first, I middle, S last);
| ^~~~~~~~~
p1205.cpp:616:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:617:10: error: 'forward_range' has not been declared
617 | template<forward_range R>
| ^~~~~~~~~~~~~
p1205.cpp:617:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:618:3: error: 'requires' does not name a type
618 | requires permutable<iterator_t<R>>
| ^~~~~~~~
p1205.cpp:618:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:622:3: error: 'constexpr' does not name a type
622 | constexpr OutputIterator
| ^~~~~~~~~
p1205.cpp:622:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:627:32: error: expected ',' or '...' before '&&' token
627 | rotate_copy(ExecutionPolicy&& exec,
| ^~
p1205.cpp:630:12: error: 'forward_iterator' has not been declared
630 | template<forward_iterator I, sentinel_for<I> S, weakly_incrementable O>
| ^~~~~~~~~~~~~~~~
p1205.cpp:630:32: error: 'sentinel_for' has not been declared
630 | template<forward_iterator I, sentinel_for<I> S, weakly_incrementable O>
| ^~~~~~~~~~~~
p1205.cpp:630:44: error: expected '>' before '<' token
630 | template<forward_iterator I, sentinel_for<I> S, weakly_incrementable O>
| ^
p1205.cpp:631:5: error: 'requires' does not name a type
631 | requires indirectly_copyable<I, O>
| ^~~~~~~~
p1205.cpp:631:5: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:640:10: error: 'indirectly_copyable' does not name a type
640 | indirectly_copyable<iterator_t<R>, O> &&
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:653:10: error: 'forward_range' has not been declared
653 | template<forward_range R, weakly_incrementable O>
| ^~~~~~~~~~~~~
p1205.cpp:653:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:653:27: error: 'weakly_incrementable' has not been declared
653 | template<forward_range R, weakly_incrementable O>
| ^~~~~~~~~~~~~~~~~~~~
p1205.cpp:654:3: error: 'requires' does not name a type
654 | requires indirectly_copyable<iterator_t<R>, O>
| ^~~~~~~~
p1205.cpp:654:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:658:1: error: expected unqualified-id before 'return'
658 | return ranges::rotate_copy(ranges::begin(r), middle, ranges::end(r), result);
| ^~~~~~
p1205.cpp:664:50: error: expected ',' or '...' before '&&' token
664 | UniformRandomBitGenerator&& g);
| ^~
p1205.cpp:665:10: error: 'input_iterator' has not been declared
665 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Gen>
| ^~~~~~~~~~~~~~
p1205.cpp:665:28: error: 'sentinel_for' has not been declared
665 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Gen>
| ^~~~~~~~~~~~
p1205.cpp:665:40: error: expected '>' before '<' token
665 | template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Gen>
| ^
p1205.cpp:666:12: error: expected constructor, destructor, or type conversion before '(' token
666 | requires (forward_iterator<I> || random_access_iterator<O>) &&
| ^
p1205.cpp:670:10: error: 'input_range' has not been declared
670 | template<input_range R, weakly_incrementable O, class Gen>
| ^~~~~~~~~~~
p1205.cpp:670:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:670:25: error: 'weakly_incrementable' has not been declared
670 | template<input_range R, weakly_incrementable O, class Gen>
| ^~~~~~~~~~~~~~~~~~~~
p1205.cpp:671:12: error: expected constructor, destructor, or type conversion before '(' token
671 | requires (forward_range<R> || random_access_iterator<O>) &&
| ^
p1205.cpp:685:41: error: expected ',' or '...' before '&&' token
685 | UniformRandomBitGenerator&& g);
| ^~
p1205.cpp:686:10: error: 'random_access_iterator' has not been declared
686 | template<random_access_iterator I, sentinel_for<I> S, class Gen>
| ^~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:686:36: error: 'sentinel_for' has not been declared
686 | template<random_access_iterator I, sentinel_for<I> S, class Gen>
| ^~~~~~~~~~~~
p1205.cpp:686:48: error: expected '>' before '<' token
686 | template<random_access_iterator I, sentinel_for<I> S, class Gen>
| ^
p1205.cpp:687:3: error: 'requires' does not name a type
687 | requires permutable<I> &&
| ^~~~~~~~
p1205.cpp:687:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:690:10: error: 'random_access_range' has not been declared
690 | template<random_access_range R, class Gen>
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:690:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:691:3: error: 'requires' does not name a type
691 | requires permutable<iterator_t<R>> &&
| ^~~~~~~~
p1205.cpp:691:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:704:31: error: expected ',' or '...' before '&&' token
704 | shift_left(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last,
| ^~
p1205.cpp:706:10: error: 'permutable' has not been declared
706 | template<permutable I, sentinel_for<I> S>
| ^~~~~~~~~~
p1205.cpp:706:24: error: 'sentinel_for' has not been declared
706 | template<permutable I, sentinel_for<I> S>
| ^~~~~~~~~~~~
p1205.cpp:706:36: error: expected '>' before '<' token
706 | template<permutable I, sentinel_for<I> S>
| ^
p1205.cpp:707:3: error: 'constexpr' does not name a type
707 | constexpr subrange<I> ranges::shift_left(I first, S last, iter_difference_t<I> n);
| ^~~~~~~~~
p1205.cpp:707:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:708:10: error: 'forward_range' has not been declared
708 | template<forward_range R>
| ^~~~~~~~~~~~~
p1205.cpp:708:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:709:3: error: 'requires' does not name a type
709 | requires permutable<iterator_t<R>>
| ^~~~~~~~
p1205.cpp:709:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
p1205.cpp:721:32: error: expected ',' or '...' before '&&' token
721 | shift_right(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last,
| ^~
p1205.cpp:723:10: error: 'permutable' has not been declared
723 | template<permutable I, sentinel_for<I> S>
| ^~~~~~~~~~
p1205.cpp:723:24: error: 'sentinel_for' has not been declared
723 | template<permutable I, sentinel_for<I> S>
| ^~~~~~~~~~~~
p1205.cpp:723:36: error: expected '>' before '<' token
723 | template<permutable I, sentinel_for<I> S>
| ^
p1205.cpp:724:3: error: 'constexpr' does not name a type
724 | constexpr subrange<I> ranges::shift_right(I first, S last, iter_difference_t<I> n);
| ^~~~~~~~~
p1205.cpp:724:3: note: C++11 'constexpr' only available with '-std=c++11' or '-std=gnu++11'
p1205.cpp:725:10: error: 'forward_range' has not been declared
725 | template<forward_range R>
| ^~~~~~~~~~~~~
p1205.cpp:725:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:726:3: error: 'requires' does not name a type
726 | requires permutable<iterator_t<R>>
| ^~~~~~~~
p1205.cpp:726:3: note: 'requires' only available with '-std=c++20' or '-fconcepts'
$ g++ p1205.cpp -std=2b -o p1205g -I. -Wall
p1205.cpp:21:77: error: 'std::ranges::copy_result<_Iter, _Out> std::ranges::copy(I, S, O)' should have been declared inside 'std::ranges'
21 | constexpr ranges::copy_result<I, O> ranges::copy(I first, S last, O result);
| ^
p1205.cpp:21:77: error: 'template<class I, class S, class O> requires (input_iterator<I>) && (sentinel_for<S, I>) && (weakly_incrementable<O>) && (indirectly_copyable<I, O>) constexpr std::ranges::copy_result<_Iter, _Out> std::ranges::copy(I, S, O)' redeclared as different kind of entity
In file included from /usr/local/include/c++/12.1.0/bits/ranges_uninitialized.h:36,
from /usr/local/include/c++/12.1.0/memory:86,
from N4910.h:14,
from p1205.cpp:10:
/usr/local/include/c++/12.1.0/bits/ranges_algobase.h:319:30: note: previous declaration 'constexpr const std::ranges::__copy_fn std::ranges::copy'
319 | inline constexpr __copy_fn copy{};
| ^~~~
p1205.cpp:22:10: error: 'input_range' has not been declared
22 | template<input_range R, weakly_incrementable O>
| ^~~~~~~~~~~
p1205.cpp:22:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:23:32: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
23 | requires indirectly_copyable<iterator_t<R>, O>
| ^~~~~~~~~~
| std::ranges::iterator_t
In file included from /usr/local/include/c++/12.1.0/string_view:50,
from /usr/local/include/c++/12.1.0/bits/basic_string.h:48,
from /usr/local/include/c++/12.1.0/string:53,
from /usr/local/include/c++/12.1.0/bits/locale_classes.h:40,
from /usr/local/include/c++/12.1.0/bits/ios_base.h:41,
from /usr/local/include/c++/12.1.0/ios:42,
from /usr/local/include/c++/12.1.0/ostream:38,
from /usr/local/include/c++/12.1.0/iostream:39,
from N4910.h:2:
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:23:12: error: parse error in template argument list
23 | requires indirectly_copyable<iterator_t<R>, O>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:23:12: error: wrong number of template arguments (1, should be 2)
In file included from /usr/local/include/c++/12.1.0/bits/stl_iterator_base_types.h:71,
from /usr/local/include/c++/12.1.0/bits/stl_construct.h:61,
from /usr/local/include/c++/12.1.0/bits/char_traits.h:46,
from /usr/local/include/c++/12.1.0/ios:40:
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:785:13: note: provided for 'template<class _In, class _Out> concept std::indirectly_copyable'
785 | concept indirectly_copyable = indirectly_readable<_In>
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:23:45: error: expected unqualified-id before ',' token
23 | requires indirectly_copyable<iterator_t<R>, O>
| ^
p1205.cpp:38:11: error: found ':' in nested-name-specifier, expected '::'
38 | Complexity: Exactly last - first assignments.
| ^
| ::
p1205.cpp:38:1: error: 'Complexity' does not name a type
38 | Complexity: Exactly last - first assignments.
| ^~~~~~~~~~
p1205.cpp:51:43: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
51 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:51:55: error: wrong number of template arguments (1, should be 2)
51 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:757:12: note: provided for 'template<class _Iter, class _Proj> requires (indirectly_readable<_Iter>) && (indirectly_regular_unary_invocable<_Proj, _Iter>) struct std::projected'
757 | struct projected
| ^~~~~~~~~
p1205.cpp:51:58: error: 'Proj' was not declared in this scope
51 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^~~~
p1205.cpp:51:8: error: template argument 1 is invalid
51 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:51:8: error: template argument 2 is invalid
p1205.cpp:54:61: error: expected unqualified-id before ')' token
54 | ranges::copy_if(R&& r, O result, Pred pred, Proj proj = {});
| ^
p1205.cpp:63:1: error: expected unqualified-id before 'requires'
63 | requires indirectly_copyable<iterator_t<R>, I>
| ^~~~~~~~
p1205.cpp:80:21: error: 'copy_if_result' in namespace 'std::ranges' does not name a template type; did you mean 'copy_n_result'?
80 | constexpr ranges::copy_if_result<I, O>
| ^~~~~~~~~~~~~~
| copy_n_result
p1205.cpp:81:73: error: expected unqualified-id before ')' token
81 | ranges::copy_if(I first, S last, O result, Pred pred, Proj proj = {});
| ^
p1205.cpp:82:10: error: 'input_range' has not been declared
82 | template<input_range R, weakly_incrementable O, class Proj = identity,
| ^~~~~~~~~~~
p1205.cpp:82:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:84:3: error: expected 'class' or 'typename' before 'constexpr'
84 | constexpr BidirectionalIterator2
| ^~~~~~~~~
p1205.cpp:84:3: error: expected identifier before 'constexpr'
p1205.cpp:84:3: error: expected '>' before 'constexpr'
p1205.cpp:87:49: error: expected unqualified-id before ';' token
87 | BidirectionalIterator2 result);
| ^
p1205.cpp:91:55: error: 'std::ranges::copy_backward_result<_Iter1, _Iter2> std::ranges::copy_backward(I1, S1, I2)' should have been declared inside 'std::ranges'
91 | ranges::copy_backward(I1 first, S1 last, I2 result);
| ^
p1205.cpp:91:55: error: 'template<class I1, class S1, class I2> requires (bidirectional_iterator<I1>) && (sentinel_for<S1, I1>) && (bidirectional_iterator<I2>) && (indirectly_copyable<I1, I2>) constexpr std::ranges::copy_backward_result<_Iter1, _Iter2> std::ranges::copy_backward(I1, S1, I2)' redeclared as different kind of entity
/usr/local/include/c++/12.1.0/bits/ranges_algobase.h:460:39: note: previous declaration 'constexpr const std::ranges::__copy_backward_fn std::ranges::copy_backward'
460 | inline constexpr __copy_backward_fn copy_backward{};
| ^~~~~~~~~~~~~
p1205.cpp:92:10: error: 'bidirectional_range' has not been declared
92 | template<bidirectional_range R, bidirectional_iterator I>
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:92:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:99:28: error: too many template-parameter-lists
99 | constexpr OutputIterator move(InputIterator first, InputIterator last,
| ^~~~
p1205.cpp:104:43: error: 'std::ranges::move_result<_Iter, _Out> std::ranges::move(I, S, O)' should have been declared inside 'std::ranges'
104 | ranges::move(I first, S last, O result);
| ^
p1205.cpp:104:43: error: 'template<class I, class S, class O> requires (input_iterator<I>) && (sentinel_for<S, I>) && (weakly_incrementable<O>) && (indirectly_movable<I, O>) constexpr std::ranges::move_result<_Iter, _Out> std::ranges::move(I, S, O)' redeclared as different kind of entity
/usr/local/include/c++/12.1.0/bits/ranges_algobase.h:344:30: note: previous declaration 'constexpr const std::ranges::__move_fn std::ranges::move'
344 | inline constexpr __move_fn move{};
| ^~~~
p1205.cpp:105:10: error: 'input_range' has not been declared
105 | template<input_range R, weakly_incrementable O>
| ^~~~~~~~~~~
p1205.cpp:105:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:106:31: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
106 | requires indirectly_movable<iterator_t<R>, O>
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:106:12: error: parse error in template argument list
106 | requires indirectly_movable<iterator_t<R>, O>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:106:12: error: wrong number of template arguments (1, should be 2)
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:773:13: note: provided for 'template<class _In, class _Out> concept std::indirectly_movable'
773 | concept indirectly_movable = indirectly_readable<_In>
| ^~~~~~~~~~~~~~~~~~
p1205.cpp:106:44: error: expected unqualified-id before ',' token
106 | requires indirectly_movable<iterator_t<R>, O>
| ^
p1205.cpp:133:55: error: 'std::ranges::move_backward_result<_Iter1, _Iter2> std::ranges::move_backward(I1, S1, I2)' should have been declared inside 'std::ranges'
133 | ranges::move_backward(I1 first, S1 last, I2 result);
| ^
p1205.cpp:133:55: error: 'template<class I1, class S1, class I2> requires (bidirectional_iterator<I1>) && (sentinel_for<S1, I1>) && (bidirectional_iterator<I2>) && (indirectly_movable<I1, I2>) constexpr std::ranges::move_backward_result<_Iter1, _Iter2> std::ranges::move_backward(I1, S1, I2)' redeclared as different kind of entity
/usr/local/include/c++/12.1.0/bits/ranges_algobase.h:485:39: note: previous declaration 'constexpr const std::ranges::__move_backward_fn std::ranges::move_backward'
485 | inline constexpr __move_backward_fn move_backward{};
| ^~~~~~~~~~~~~
p1205.cpp:134:10: error: 'bidirectional_range' has not been declared
134 | template<bidirectional_range R, bidirectional_iterator I>
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:134:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:135:31: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
135 | requires indirectly_movable<iterator_t<R>, I>
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:135:12: error: parse error in template argument list
135 | requires indirectly_movable<iterator_t<R>, I>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:135:12: error: wrong number of template arguments (1, should be 2)
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:773:13: note: provided for 'template<class _In, class _Out> concept std::indirectly_movable'
773 | concept indirectly_movable = indirectly_readable<_In>
| ^~~~~~~~~~~~~~~~~~
p1205.cpp:135:44: error: expected unqualified-id before ',' token
135 | requires indirectly_movable<iterator_t<R>, I>
| ^
p1205.cpp:143:1: error: expected unqualified-id before 'requires'
143 | requires indirectly_swappable<iterator_t<R1>, iterator_t<R2>>
| ^~~~~~~~
p1205.cpp:170:21: error: 'swap_ranges_result' in namespace 'std::ranges' does not name a template type
170 | constexpr ranges::swap_ranges_result<I1, I2>
| ^~~~~~~~~~~~~~~~~~
p1205.cpp:172:10: error: 'input_range' has not been declared
172 | template<input_range R1, input_range R2>
| ^~~~~~~~~~~
p1205.cpp:172:26: error: 'input_range' has not been declared
172 | template<input_range R1, input_range R2>
| ^~~~~~~~~~~
p1205.cpp:173:30: error: 'O' was not declared in this scope
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^
p1205.cpp:173:51: error: 'F' was not declared in this scope
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^
p1205.cpp:173:76: error: 'R1' was not declared in this scope; did you mean 'y1'?
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^~
| y1
p1205.cpp:173:76: error: 'R1' was not declared in this scope; did you mean 'y1'?
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^~
| y1
p1205.cpp:173:76: error: 'R1' was not declared in this scope; did you mean 'y1'?
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^~
| y1
p1205.cpp:173:76: error: 'R1' was not declared in this scope; did you mean 'y1'?
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^~
| y1
p1205.cpp:173:76: error: 'R1' was not declared in this scope; did you mean 'y1'?
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^~
| y1
p1205.cpp:173:76: error: 'R1' was not declared in this scope; did you mean 'y1'?
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^~
| y1
p1205.cpp:173:76: error: 'R1' was not declared in this scope; did you mean 'y1'?
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^~
| y1
p1205.cpp:173:76: error: 'R1' was not declared in this scope; did you mean 'y1'?
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^~
| y1
p1205.cpp:173:76: error: 'R1' was not declared in this scope; did you mean 'y1'?
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^~
| y1
p1205.cpp:173:76: error: 'R1' was not declared in this scope; did you mean 'y1'?
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^~
| y1
p1205.cpp:173:76: error: 'R1' was not declared in this scope; did you mean 'y1'?
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^~
| y1
p1205.cpp:173:65: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:173:76: error: 'R1' was not declared in this scope; did you mean 'y1'?
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^~
| y1
p1205.cpp:173:78: error: wrong number of template arguments (1, should be 2)
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:757:12: note: provided for 'template<class _Iter, class _Proj> requires (indirectly_readable<_Iter>) && (indirectly_regular_unary_invocable<_Proj, _Iter>) struct std::projected'
757 | struct projected
| ^~~~~~~~~
p1205.cpp:173:81: error: 'Proj1' was not declared in this scope
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^~~~~
p1205.cpp:173:86: error: template argument 1 is invalid
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^
p1205.cpp:173:86: error: template argument 2 is invalid
p1205.cpp:173:86: error: template argument 3 is invalid
p1205.cpp:174:61: error: 'R2' was not declared in this scope; did you mean 'R'?
174 | projected<iterator_t<R2>, Proj2>>>
| ^~
| R
p1205.cpp:174:61: error: 'R2' was not declared in this scope; did you mean 'R'?
174 | projected<iterator_t<R2>, Proj2>>>
| ^~
| R
p1205.cpp:174:61: error: 'R2' was not declared in this scope; did you mean 'R'?
174 | projected<iterator_t<R2>, Proj2>>>
| ^~
| R
p1205.cpp:174:61: error: 'R2' was not declared in this scope; did you mean 'R'?
174 | projected<iterator_t<R2>, Proj2>>>
| ^~
| R
p1205.cpp:174:61: error: 'R2' was not declared in this scope; did you mean 'R'?
174 | projected<iterator_t<R2>, Proj2>>>
| ^~
| R
p1205.cpp:174:61: error: 'R2' was not declared in this scope; did you mean 'R'?
174 | projected<iterator_t<R2>, Proj2>>>
| ^~
| R
p1205.cpp:174:61: error: 'R2' was not declared in this scope; did you mean 'R'?
174 | projected<iterator_t<R2>, Proj2>>>
| ^~
| R
p1205.cpp:174:61: error: 'R2' was not declared in this scope; did you mean 'R'?
174 | projected<iterator_t<R2>, Proj2>>>
| ^~
| R
p1205.cpp:174:61: error: 'R2' was not declared in this scope; did you mean 'R'?
174 | projected<iterator_t<R2>, Proj2>>>
| ^~
| R
p1205.cpp:174:61: error: 'R2' was not declared in this scope; did you mean 'R'?
174 | projected<iterator_t<R2>, Proj2>>>
| ^~
| R
p1205.cpp:174:61: error: 'R2' was not declared in this scope; did you mean 'R'?
174 | projected<iterator_t<R2>, Proj2>>>
| ^~
| R
p1205.cpp:174:50: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
174 | projected<iterator_t<R2>, Proj2>>>
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:174:61: error: 'R2' was not declared in this scope; did you mean 'R'?
174 | projected<iterator_t<R2>, Proj2>>>
| ^~
| R
p1205.cpp:174:63: error: wrong number of template arguments (1, should be 2)
174 | projected<iterator_t<R2>, Proj2>>>
| ^
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:757:12: note: provided for 'template<class _Iter, class _Proj> requires (indirectly_readable<_Iter>) && (indirectly_regular_unary_invocable<_Proj, _Iter>) struct std::projected'
757 | struct projected
| ^~~~~~~~~
p1205.cpp:174:66: error: 'Proj2' was not declared in this scope
174 | projected<iterator_t<R2>, Proj2>>>
| ^~~~~
p1205.cpp:173:10: error: wrong number of template arguments (4, should be 2)
173 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
174 | projected<iterator_t<R2>, Proj2>>>
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:542:13: note: provided for 'template<class _Out, class _Tp> concept std::indirectly_writable'
542 | concept indirectly_writable = requires(_Out&& __o, _Tp&& __t)
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:174:71: error: expected unqualified-id before '>' token
174 | projected<iterator_t<R2>, Proj2>>>
| ^~
p1205.cpp:177:50: error: expected unqualified-id before ',' token
177 | F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {});
| ^
p1205.cpp:177:58: error: expected constructor, destructor, or type conversion before 'proj2'
177 | F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {});
| ^~~~~
p1205.cpp:177:68: error: expected unqualified-id before ')' token
177 | F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {});
| ^
p1205.cpp:210:21: error: 'unary_transform_result' in namespace 'std::ranges' does not name a template type
210 | constexpr ranges::unary_transform_result<I, O>
| ^~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:211:72: error: expected unqualified-id before ')' token
211 | ranges::transform(I first1, S last1, O result, F op, Proj proj = {});
| ^
p1205.cpp:212:10: error: 'input_range' has not been declared
212 | template<input_range R, weakly_incrementable O, copy_constructible F,
| ^~~~~~~~~~~
p1205.cpp:212:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:214:67: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
214 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R>, Proj>>>
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:214:79: error: wrong number of template arguments (1, should be 2)
214 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R>, Proj>>>
| ^
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:757:12: note: provided for 'template<class _Iter, class _Proj> requires (indirectly_readable<_Iter>) && (indirectly_regular_unary_invocable<_Proj, _Iter>) struct std::projected'
757 | struct projected
| ^~~~~~~~~
p1205.cpp:214:82: error: template argument 2 is invalid
214 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R>, Proj>>>
| ^~~~
p1205.cpp:214:12: error: template argument 2 is invalid
214 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R>, Proj>>>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:214:88: error: expected unqualified-id before '>' token
214 | requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R>, Proj>>>
| ^
p1205.cpp:216:60: error: expected unqualified-id before ')' token
216 | ranges::transform(R&& r, O result, F op, Proj proj = {});
| ^
p1205.cpp:222:21: error: 'binary_transform_result' in namespace 'std::ranges' does not name a template type
222 | constexpr ranges::binary_transform_result<I1, I2, O>
| ^~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:224:52: error: expected unqualified-id before ',' token
224 | F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {});
| ^
p1205.cpp:224:60: error: expected constructor, destructor, or type conversion before 'proj2'
224 | F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {});
| ^~~~~
p1205.cpp:224:70: error: expected unqualified-id before ')' token
224 | F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {});
| ^
p1205.cpp:225:10: error: 'input_range' has not been declared
225 | template<input_range R1, input_range R2, weakly_incrementable O,
| ^~~~~~~~~~~
p1205.cpp:225:26: error: 'input_range' has not been declared
225 | template<input_range R1, input_range R2, weakly_incrementable O,
| ^~~~~~~~~~~
p1205.cpp:244:18: error: too many template-parameter-lists
244 | constexpr void replace(ForwardIterator first, ForwardIterator last,
| ^~~~~~~
p1205.cpp:261:94: error: 'I std::ranges::replace(I, S, const T1&, const T2&, Proj)' should have been declared inside 'std::ranges'
261 | ranges::replace(I first, S last, const T1& old_value, const T2& new_value, Proj proj = {});
| ^
p1205.cpp:262:10: error: 'input_range' has not been declared
262 | template<input_range R, class T1, class T2, class Proj = identity>
| ^~~~~~~~~~~
p1205.cpp:262:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:263:32: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
263 | requires indirectly_writable<iterator_t<R>, const T2&> &&
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:263:12: error: parse error in template argument list
263 | requires indirectly_writable<iterator_t<R>, const T2&> &&
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:263:12: error: wrong number of template arguments (1, should be 2)
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:542:13: note: provided for 'template<class _Out, class _Tp> concept std::indirectly_writable'
542 | concept indirectly_writable = requires(_Out&& __o, _Tp&& __t)
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:263:45: error: expected unqualified-id before ',' token
263 | requires indirectly_writable<iterator_t<R>, const T2&> &&
| ^
p1205.cpp:266:84: error: expected unqualified-id before ')' token
266 | ranges::replace(R&& r, const T1& old_value, const T2& new_value, Proj proj = {});
| ^
p1205.cpp:270:96: error: 'I std::ranges::replace_if(I, S, Pred, const T&, Proj)' should have been declared inside 'std::ranges'
270 | constexpr I ranges::replace_if(I first, S last, Pred pred, const T& new_value, Proj proj = {});
| ^
p1205.cpp:271:10: error: 'input_range' has not been declared
271 | template<input_range R, class T, class Proj = identity,
| ^~~~~~~~~~~
p1205.cpp:271:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:272:45: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
272 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:272:57: error: wrong number of template arguments (1, should be 2)
272 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:757:12: note: provided for 'template<class _Iter, class _Proj> requires (indirectly_readable<_Iter>) && (indirectly_regular_unary_invocable<_Proj, _Iter>) struct std::projected'
757 | struct projected
| ^~~~~~~~~
p1205.cpp:272:10: error: wrong number of template arguments (3, should be 2)
272 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:710:13: note: provided for 'template<class _Fn, class _Iter> concept std::indirect_unary_predicate'
710 | concept indirect_unary_predicate = indirectly_readable<_Iter>
| ^~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:272:67: error: 'Pred' does not name a type
272 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^~~~
p1205.cpp:275:76: error: expected unqualified-id before ')' token
275 | ranges::replace_if(R&& r, Pred pred, const T& new_value, Proj proj = {});
| ^
p1205.cpp:311:21: error: 'replace_copy_result' in namespace 'std::ranges' does not name a template type
311 | constexpr ranges::replace_copy_result<I, O>
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:313:40: error: expected unqualified-id before ')' token
313 | Proj proj = {});
| ^
p1205.cpp:314:10: error: 'input_range' has not been declared
314 | template<input_range R, class T1, class T2, output_iterator<const T2&> O,
| ^~~~~~~~~~~
p1205.cpp:314:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:316:32: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
316 | requires indirectly_copyable<iterator_t<R>, O> &&
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:316:12: error: parse error in template argument list
316 | requires indirectly_copyable<iterator_t<R>, O> &&
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:316:12: error: wrong number of template arguments (1, should be 2)
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:785:13: note: provided for 'template<class _In, class _Out> concept std::indirectly_copyable'
785 | concept indirectly_copyable = indirectly_readable<_In>
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:316:45: error: expected unqualified-id before ',' token
316 | requires indirectly_copyable<iterator_t<R>, O> &&
| ^
p1205.cpp:320:40: error: expected unqualified-id before ')' token
320 | Proj proj = {});
| ^
p1205.cpp:324:21: error: 'replace_copy_if_result' in namespace 'std::ranges' does not name a template type
324 | constexpr ranges::replace_copy_if_result<I, O>
| ^~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:326:43: error: expected unqualified-id before ')' token
326 | Proj proj = {});
| ^
p1205.cpp:327:10: error: 'input_range' has not been declared
327 | template<input_range R, class T, output_iterator<const T&> O, class Proj = identity,
| ^~~~~~~~~~~
p1205.cpp:327:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:328:45: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
328 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:328:57: error: wrong number of template arguments (1, should be 2)
328 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:757:12: note: provided for 'template<class _Iter, class _Proj> requires (indirectly_readable<_Iter>) && (indirectly_regular_unary_invocable<_Proj, _Iter>) struct std::projected'
757 | struct projected
| ^~~~~~~~~
p1205.cpp:328:10: error: wrong number of template arguments (3, should be 2)
328 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:710:13: note: provided for 'template<class _Fn, class _Iter> concept std::indirect_unary_predicate'
710 | concept indirect_unary_predicate = indirectly_readable<_Iter>
| ^~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:328:67: error: 'Pred' does not name a type
328 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^~~~
p1205.cpp:332:43: error: expected unqualified-id before ')' token
332 | Proj proj = {});
| ^
p1205.cpp:358:59: error: 'O std::ranges::fill(O, S, const T&)' should have been declared inside 'std::range'
358 | constexpr O ranges::fill(O first, S last, const T& value);
| ^
p1205.cpp:358:59: error: 'template<class T, class O, class S> requires (output_iterator<O, const T&>) && (sentinel_for<S, O>) constexpr O std::ranges::fill(O, S, const T&)' redeclared as different kind of entity
/usr/local/include/c++/12.1.0/bits/ranges_algobase.h:596:30: note: previous declaration 'constexpr const std::ranges::__fill_fn std::ranges::fill'
596 | inline constexpr __fill_fn fill{};
| ^~~~
p1205.cpp:359:19: error: 'output_range' has not been declared
359 | template<class T, output_range<const T&> R>
| ^~~~~~~~~~~~
p1205.cpp:359:31: error: expected '>' before '<' token
359 | template<class T, output_range<const T&> R>
| ^
p1205.cpp:360:13: error: 'borrowed_iterator_t' does not name a type
360 | constexpr borrowed_iterator_t<R> ranges::fill(R&& r, const T& value);
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:362:77: error: 'O std::ranges::fill_n(O, std::iter_difference_t<_Iter>, const T&)' should have been declared inside 'std::ranges'
362 | constexpr O ranges::fill_n(O first, iter_difference_t<O> n, const T& value);
| ^
p1205.cpp:362:77: error: 'template<class T, class O> requires output_iterator<O, const T&> constexpr O std::ranges::fill_n(O, std::iter_difference_t<_Iter>, const T&)' redeclared as different kind of entity
/usr/local/include/c++/12.1.0/bits/ranges_algobase.h:557:32: note: previous declaration 'constexpr const std::ranges::__fill_n_fn std::ranges::fill_n'
557 | inline constexpr __fill_n_fn fill_n{};
| ^~~~~~
p1205.cpp:378:54: error: 'O std::ranges::generate(O, S, F)' should have been declared inside 'std::ranges'
378 | constexpr O ranges::generate(O first, S last, F gen);
| ^
p1205.cpp:14:11: error: expected identifier before 'int'
14 | #define R int
| ^~~
p1205.cpp:379:16: note: in expansion of macro 'R'
379 | template<class R, copy_constructible F>
| ^
p1205.cpp:379:10: error: two or more data types in declaration of 'parameter'
379 | template<class R, copy_constructible F>
| ^~~~~
p1205.cpp:380:29: error: 'output_range' was not declared in this scope; did you mean 'std::ranges::output_range'?
380 | requires invocable<F&> && output_range<R, invoke_result_t<F&>>
| ^~~~~~~~~~~~
| std::ranges::output_range
/usr/local/include/c++/12.1.0/bits/ranges_base.h:656:13: note: 'std::ranges::output_range' declared here
656 | concept output_range
| ^~~~~~~~~~~~
p1205.cpp:380:26: error: expression must be enclosed in parentheses
380 | requires invocable<F&> && output_range<R, invoke_result_t<F&>>
| ^~
p1205.cpp:380:29: error: 'output_range' does not name a type
380 | requires invocable<F&> && output_range<R, invoke_result_t<F&>>
| ^~~~~~~~~~~~
p1205.cpp:384:72: error: 'O std::ranges::generate_n(O, std::iter_difference_t<_Iter>, F)' should have been declared inside 'std::ranges'
384 | constexpr O ranges::generate_n(O first, iter_difference_t<O> n, F gen);
| ^
p1205.cpp:406:13: error: 'subrange' does not name a type
406 | constexpr subrange<I> ranges::remove(I first, S last, const T& value, Proj proj = {});
| ^~~~~~~~
p1205.cpp:406:87: error: expected unqualified-id before ')' token
406 | constexpr subrange<I> ranges::remove(I first, S last, const T& value, Proj proj = {});
| ^
p1205.cpp:407:10: error: 'forward_range' has not been declared
407 | template<forward_range R, class T, class Proj = identity>
| ^~~~~~~~~~~~~
p1205.cpp:407:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:408:23: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
408 | requires permutable<iterator_t<R>> &&
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:408:12: error: parse error in template argument list
408 | requires permutable<iterator_t<R>> &&
| ^~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:408:12: error: template argument 1 is invalid
p1205.cpp:409:66: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
409 | indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T*>
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:409:78: error: wrong number of template arguments (1, should be 2)
409 | indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T*>
| ^
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:757:12: note: provided for 'template<class _Iter, class _Proj> requires (indirectly_readable<_Iter>) && (indirectly_regular_unary_invocable<_Proj, _Iter>) struct std::projected'
757 | struct projected
| ^~~~~~~~~
p1205.cpp:409:12: error: template argument 2 is invalid
409 | indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T*>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:409:86: error: expected unqualified-id before ',' token
409 | indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T*>
| ^
p1205.cpp:411:57: error: expected unqualified-id before ')' token
411 | ranges::remove(R&& r, const T& value, Proj proj = {});
| ^
p1205.cpp:414:13: error: 'subrange' does not name a type
414 | constexpr subrange<I> ranges::remove_if(I first, S last, Pred pred, Proj proj = {});
| ^~~~~~~~
p1205.cpp:414:85: error: expected unqualified-id before ')' token
414 | constexpr subrange<I> ranges::remove_if(I first, S last, Pred pred, Proj proj = {});
| ^
p1205.cpp:415:10: error: 'forward_range' has not been declared
415 | template<forward_range R, class Proj = identity,
| ^~~~~~~~~~~~~
p1205.cpp:415:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:416:45: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
416 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:416:57: error: wrong number of template arguments (1, should be 2)
416 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:757:12: note: provided for 'template<class _Iter, class _Proj> requires (indirectly_readable<_Iter>) && (indirectly_regular_unary_invocable<_Proj, _Iter>) struct std::projected'
757 | struct projected
| ^~~~~~~~~
p1205.cpp:416:10: error: wrong number of template arguments (3, should be 2)
416 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:710:13: note: provided for 'template<class _Fn, class _Iter> concept std::indirect_unary_predicate'
710 | concept indirect_unary_predicate = indirectly_readable<_Iter>
| ^~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:416:67: error: 'Pred' does not name a type
416 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^~~~
p1205.cpp:419:55: error: expected unqualified-id before ')' token
419 | ranges::remove_if(R&& r, Pred pred, Proj proj = {});
| ^
p1205.cpp:456:21: error: 'remove_copy_result' in namespace 'std::ranges' does not name a template type
456 | constexpr ranges::remove_copy_result<I, O>
| ^~~~~~~~~~~~~~~~~~
p1205.cpp:457:82: error: expected unqualified-id before ')' token
457 | ranges::remove_copy(I first, S last, O result, const T& value, Proj proj = {});
| ^
p1205.cpp:458:10: error: 'input_range' has not been declared
458 | template<input_range R, weakly_incrementable O, class T, class Proj = identity>
| ^~~~~~~~~~~
p1205.cpp:458:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:459:32: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
459 | requires indirectly_copyable<iterator_t<R>, O> &&
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:459:12: error: parse error in template argument list
459 | requires indirectly_copyable<iterator_t<R>, O> &&
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:459:12: error: wrong number of template arguments (1, should be 2)
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:785:13: note: provided for 'template<class _In, class _Out> concept std::indirectly_copyable'
785 | concept indirectly_copyable = indirectly_readable<_In>
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:459:45: error: expected unqualified-id before ',' token
459 | requires indirectly_copyable<iterator_t<R>, O> &&
| ^
p1205.cpp:462:72: error: expected unqualified-id before ')' token
462 | ranges::remove_copy(R&& r, O result, const T& value, Proj proj = {});
| ^
p1205.cpp:466:21: error: 'remove_copy_if_result' in namespace 'std::ranges' does not name a template type
466 | constexpr ranges::remove_copy_if_result<I, O>
| ^~~~~~~~~~~~~~~~~~~~~
p1205.cpp:467:80: error: expected unqualified-id before ')' token
467 | ranges::remove_copy_if(I first, S last, O result, Pred pred, Proj proj = {});
| ^
p1205.cpp:468:10: error: 'input_range' has not been declared
468 | template<input_range R, weakly_incrementable O, class Proj = identity,
| ^~~~~~~~~~~
p1205.cpp:468:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:469:45: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
469 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:469:57: error: wrong number of template arguments (1, should be 2)
469 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:757:12: note: provided for 'template<class _Iter, class _Proj> requires (indirectly_readable<_Iter>) && (indirectly_regular_unary_invocable<_Proj, _Iter>) struct std::projected'
757 | struct projected
| ^~~~~~~~~
p1205.cpp:469:10: error: wrong number of template arguments (3, should be 2)
469 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:710:13: note: provided for 'template<class _Fn, class _Iter> concept std::indirect_unary_predicate'
710 | concept indirect_unary_predicate = indirectly_readable<_Iter>
| ^~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:469:67: error: 'Pred' does not name a type
469 | indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred>
| ^~~~
p1205.cpp:472:70: error: expected unqualified-id before ')' token
472 | ranges::remove_copy_if(R&& r, O result, Pred pred, Proj proj = {});
| ^
p1205.cpp:485:48: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
485 | indirect_equivalence_relation<projected<iterator_t<R>, Proj>> C = ranges::equal_to>
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:485:60: error: wrong number of template arguments (1, should be 2)
485 | indirect_equivalence_relation<projected<iterator_t<R>, Proj>> C = ranges::equal_to>
| ^
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:757:12: note: provided for 'template<class _Iter, class _Proj> requires (indirectly_readable<_Iter>) && (indirectly_regular_unary_invocable<_Proj, _Iter>) struct std::projected'
757 | struct projected
| ^~~~~~~~~
p1205.cpp:485:63: error: 'Proj' was not declared in this scope
485 | indirect_equivalence_relation<projected<iterator_t<R>, Proj>> C = ranges::equal_to>
| ^~~~
p1205.cpp:485:8: error: template argument 1 is invalid
485 | indirect_equivalence_relation<projected<iterator_t<R>, Proj>> C = ranges::equal_to>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:485:8: error: template argument 2 is invalid
p1205.cpp:485:8: error: template argument 3 is invalid
p1205.cpp:485:8: error: '<expression error>' does not name a type
p1205.cpp:488:36: error: expected unqualified-id before ',' token
488 | ranges::unique(R&& r, C comp = {}, Proj proj = {});
| ^
p1205.cpp:488:43: error: expected constructor, destructor, or type conversion before 'proj'
488 | ranges::unique(R&& r, C comp = {}, Proj proj = {});
| ^~~~
p1205.cpp:488:52: error: expected unqualified-id before ')' token
488 | ranges::unique(R&& r, C comp = {}, Proj proj = {});
| ^
p1205.cpp:505:13: error: 'subrange' does not name a type
505 | constexpr subrange<I> ranges::unique(I first, S last, C comp = {}, Proj proj = {});
| ^~~~~~~~
p1205.cpp:505:68: error: expected unqualified-id before ',' token
505 | constexpr subrange<I> ranges::unique(I first, S last, C comp = {}, Proj proj = {});
| ^
p1205.cpp:505:75: error: expected constructor, destructor, or type conversion before 'proj'
505 | constexpr subrange<I> ranges::unique(I first, S last, C comp = {}, Proj proj = {});
| ^~~~
p1205.cpp:505:84: error: expected unqualified-id before ')' token
505 | constexpr subrange<I> ranges::unique(I first, S last, C comp = {}, Proj proj = {});
| ^
p1205.cpp:506:10: error: 'forward_range' has not been declared
506 | template<forward_range R, class Proj = identity,
| ^~~~~~~~~~~~~
p1205.cpp:506:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:513:48: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
513 | indirect_equivalence_relation<projected<iterator_t<R>, Proj>> C = ranges::equal_to>
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:513:60: error: wrong number of template arguments (1, should be 2)
513 | indirect_equivalence_relation<projected<iterator_t<R>, Proj>> C = ranges::equal_to>
| ^
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:757:12: note: provided for 'template<class _Iter, class _Proj> requires (indirectly_readable<_Iter>) && (indirectly_regular_unary_invocable<_Proj, _Iter>) struct std::projected'
757 | struct projected
| ^~~~~~~~~
p1205.cpp:513:8: error: template argument 2 is invalid
513 | indirect_equivalence_relation<projected<iterator_t<R>, Proj>> C = ranges::equal_to>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:513:70: error: 'C' does not name a type
513 | indirect_equivalence_relation<projected<iterator_t<R>, Proj>> C = ranges::equal_to>
| ^
p1205.cpp:519:51: error: expected unqualified-id before ',' token
519 | ranges::unique_copy(R&& r, O result, C comp = {}, Proj proj = {});
| ^
p1205.cpp:519:58: error: expected constructor, destructor, or type conversion before 'proj'
519 | ranges::unique_copy(R&& r, O result, C comp = {}, Proj proj = {});
| ^~~~
p1205.cpp:519:67: error: expected unqualified-id before ')' token
519 | ranges::unique_copy(R&& r, O result, C comp = {}, Proj proj = {});
| ^
p1205.cpp:550:21: error: 'unique_copy_result' in namespace 'std::ranges' does not name a template type
550 | constexpr ranges::unique_copy_result<I, O>
| ^~~~~~~~~~~~~~~~~~
p1205.cpp:551:63: error: expected unqualified-id before ',' token
551 | ranges::unique_copy(I first, S last, O result, C comp = {}, Proj proj = {});
| ^
p1205.cpp:551:70: error: expected constructor, destructor, or type conversion before 'proj'
551 | ranges::unique_copy(I first, S last, O result, C comp = {}, Proj proj = {});
| ^~~~
p1205.cpp:551:79: error: expected unqualified-id before ')' token
551 | ranges::unique_copy(I first, S last, O result, C comp = {}, Proj proj = {});
| ^
p1205.cpp:552:10: error: 'input_range' has not been declared
552 | template<input_range R, weakly_incrementable O, class Proj = identity,
| ^~~~~~~~~~~
p1205.cpp:552:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:568:3: error: expected 'class' or 'typename' before 'constexpr'
568 | constexpr void reverse(BidirectionalIterator first, BidirectionalIterator last);
| ^~~~~~~~~
p1205.cpp:568:3: error: expected identifier before 'constexpr'
p1205.cpp:568:3: error: expected '>' before 'constexpr'
p1205.cpp:568:82: error: expected unqualified-id before ';' token
568 | constexpr void reverse(BidirectionalIterator first, BidirectionalIterator last);
| ^
p1205.cpp:574:46: error: 'I std::ranges::reverse(I, S)' should have been declared inside 'std::ranges'
574 | constexpr I ranges::reverse(I first, S last);
| ^
p1205.cpp:575:10: error: 'bidirectional_range' has not been declared
575 | template<bidirectional_range R>
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:575:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:576:23: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
576 | requires permutable<iterator_t<R>>
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:576:12: error: parse error in template argument list
576 | requires permutable<iterator_t<R>>
| ^~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:576:12: error: template argument 1 is invalid
p1205.cpp:577:13: error: 'borrowed_iterator_t' does not name a type
577 | constexpr borrowed_iterator_t<R> ranges::reverse(R&& r);
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:589:21: error: 'reverse_copy_result' in namespace 'std::ranges' does not name a template type
589 | constexpr ranges::reverse_copy_result<I, O>
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:591:10: error: 'bidirectional_range' has not been declared
591 | template<bidirectional_range R, weakly_incrementable O>
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:591:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:592:32: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
592 | requires indirectly_copyable<iterator_t<R>, O>
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:592:12: error: parse error in template argument list
592 | requires indirectly_copyable<iterator_t<R>, O>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:592:12: error: wrong number of template arguments (1, should be 2)
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:785:13: note: provided for 'template<class _In, class _Out> concept std::indirectly_copyable'
785 | concept indirectly_copyable = indirectly_readable<_In>
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:592:45: error: expected unqualified-id before ',' token
592 | requires indirectly_copyable<iterator_t<R>, O>
| ^
p1205.cpp:616:13: error: 'subrange' does not name a type
616 | constexpr subrange<I> ranges::rotate(I first, I middle, S last);
| ^~~~~~~~
p1205.cpp:617:10: error: 'forward_range' has not been declared
617 | template<forward_range R>
| ^~~~~~~~~~~~~
p1205.cpp:617:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:618:23: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
618 | requires permutable<iterator_t<R>>
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:618:12: error: parse error in template argument list
618 | requires permutable<iterator_t<R>>
| ^~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:618:12: error: template argument 1 is invalid
p1205.cpp:619:13: error: 'borrowed_subrange_t' does not name a type
619 | constexpr borrowed_subrange_t<R> ranges::rotate(R&& r, iterator_t<R> middle);
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:632:23: error: 'rotate_copy_result' in namespace 'std::ranges' does not name a template type
632 | constexpr ranges::rotate_copy_result<I, O>
| ^~~~~~~~~~~~~~~~~~
p1205.cpp:640:30: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
640 | indirectly_copyable<iterator_t<R>, O> &&
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:640:10: error: parse error in template argument list
640 | indirectly_copyable<iterator_t<R>, O> &&
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:640:10: error: wrong number of template arguments (1, should be 2)
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:785:13: note: provided for 'template<class _In, class _Out> concept std::indirectly_copyable'
785 | concept indirectly_copyable = indirectly_readable<_In>
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:640:10: error: '<expression error>' does not name a type
640 | indirectly_copyable<iterator_t<R>, O> &&
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:653:10: error: 'forward_range' has not been declared
653 | template<forward_range R, weakly_incrementable O>
| ^~~~~~~~~~~~~
p1205.cpp:653:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:654:32: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
654 | requires indirectly_copyable<iterator_t<R>, O>
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:654:12: error: parse error in template argument list
654 | requires indirectly_copyable<iterator_t<R>, O>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:654:12: error: wrong number of template arguments (1, should be 2)
/usr/local/include/c++/12.1.0/bits/iterator_concepts.h:785:13: note: provided for 'template<class _In, class _Out> concept std::indirectly_copyable'
785 | concept indirectly_copyable = indirectly_readable<_In>
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:654:45: error: expected unqualified-id before ',' token
654 | requires indirectly_copyable<iterator_t<R>, O>
| ^
p1205.cpp:658:1: error: expected unqualified-id before 'return'
658 | return ranges::rotate_copy(ranges::begin(r), middle, ranges::end(r), result);
| ^~~~~~
p1205.cpp:668:12: error: 'uniform_random_bit_generator' was not declared in this scope
668 | uniform_random_bit_generator<remove_reference_t<Gen>>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:667:38: error: expression must be enclosed in parentheses
667 | indirectly_copyable<I, O> &&
| ^~
p1205.cpp:668:12: error: 'uniform_random_bit_generator' does not name a type
668 | uniform_random_bit_generator<remove_reference_t<Gen>>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:670:10: error: 'input_range' has not been declared
670 | template<input_range R, weakly_incrementable O, class Gen>
| ^~~~~~~~~~~
p1205.cpp:670:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:671:13: error: 'forward_range' was not declared in this scope; did you mean 'std::ranges::forward_range'?
671 | requires (forward_range<R> || random_access_iterator<O>) &&
| ^~~~~~~~~~~~~
| std::ranges::forward_range
/usr/local/include/c++/12.1.0/bits/ranges_base.h:665:13: note: 'std::ranges::forward_range' declared here
665 | concept forward_range
| ^~~~~~~~~~~~~
p1205.cpp:14:11: error: expected primary-expression before 'int'
14 | #define R int
| ^~~
p1205.cpp:671:27: note: in expansion of macro 'R'
671 | requires (forward_range<R> || random_access_iterator<O>) &&
| ^
p1205.cpp:671:27: error: expected ')' before 'int'
671 | requires (forward_range<R> || random_access_iterator<O>) &&
| ~ ^
| )
p1205.cpp:675:55: error: expected unqualified-id before ';' token
675 | borrowed_iterator_t<R> ranges::shuffle(R&& r, Gen&& g);
| ^
p1205.cpp:688:12: error: 'uniform_random_bit_generator' was not declared in this scope
688 | uniform_random_bit_generator<remove_reference_t<Gen>>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:687:26: error: expression must be enclosed in parentheses
687 | requires permutable<I> &&
| ^~
p1205.cpp:688:12: error: 'uniform_random_bit_generator' does not name a type
688 | uniform_random_bit_generator<remove_reference_t<Gen>>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:690:10: error: 'random_access_range' has not been declared
690 | template<random_access_range R, class Gen>
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:690:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:691:23: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
691 | requires permutable<iterator_t<R>> &&
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:691:12: error: parse error in template argument list
691 | requires permutable<iterator_t<R>> &&
| ^~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:691:12: error: template argument 1 is invalid
p1205.cpp:698:1: error: expected primary-expression before 'template'
698 | template<class ForwardIterator>
| ^~~~~~~~
p1205.cpp:700:5: error: too many template-parameter-lists
700 | shift_left(ForwardIterator first, ForwardIterator last,
| ^~~~~~~~~~
p1205.cpp:707:13: error: 'subrange' does not name a type
707 | constexpr subrange<I> ranges::shift_left(I first, S last, iter_difference_t<I> n);
| ^~~~~~~~
p1205.cpp:708:10: error: 'forward_range' has not been declared
708 | template<forward_range R>
| ^~~~~~~~~~~~~
p1205.cpp:708:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:709:23: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
709 | requires permutable<iterator_t<R>>
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:709:12: error: parse error in template argument list
709 | requires permutable<iterator_t<R>>
| ^~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:709:12: error: template argument 1 is invalid
p1205.cpp:710:13: error: 'borrowed_subrange_t' does not name a type
710 | constexpr borrowed_subrange_t<R> ranges::shift_left(R&& r, range_difference_t<R> n)
| ^~~~~~~~~~~~~~~~~~~
p1205.cpp:724:13: error: 'subrange' does not name a type
724 | constexpr subrange<I> ranges::shift_right(I first, S last, iter_difference_t<I> n);
| ^~~~~~~~
p1205.cpp:725:10: error: 'forward_range' has not been declared
725 | template<forward_range R>
| ^~~~~~~~~~~~~
p1205.cpp:725:10: error: two or more data types in declaration of 'parameter'
p1205.cpp:726:23: error: 'iterator_t' was not declared in this scope; did you mean 'std::ranges::iterator_t'?
726 | requires permutable<iterator_t<R>>
| ^~~~~~~~~~
| std::ranges::iterator_t
/usr/local/include/c++/12.1.0/bits/ranges_base.h:595:11: note: 'std::ranges::iterator_t' declared here
595 | using iterator_t = std::__detail::__range_iter_t<_Tp>;
| ^~~~~~~~~~
p1205.cpp:726:12: error: parse error in template argument list
726 | requires permutable<iterator_t<R>>
| ^~~~~~~~~~~~~~~~~~~~~~~~~
p1205.cpp:726:12: error: template argument 1 is invalid
p1205.cpp:727:13: error: 'borrowed_subrange_t' does not name a type
727 | constexpr borrowed_subrange_t<R> ranges::shift_right(R&& r, range_difference_t<R> n);
| ^~~~~~~~~~~~~~~~~~~
検討事項(agenda)
コンパイルエラーを取るか、コンパイルエラーの理由を解説する。
参考資料(reference)
関連する自己参照以外は、こちらの先頭に移転。
C言語(C++)に対する誤解、曲解、無理解、爽快。
#include "N4910.h"
C++N4910資料の改善点
dockerにclang
docker gnu(gcc/g++) and llvm(clang/clang++)
コンパイル用shell script C版(clangとgcc)とC++版(clang++とg++)
C++N4910:2022 tag follower 300人超えました。ありがとうございます。
astyle 使ってみた
DoCAP(ドゥーキャップ)って何ですか?
小川メソッド 覚え(書きかけ)
<この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。>
文書履歴(document history)
ver. 0.01 初稿 20220815