Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions lang/cpp11/range_based_for.md
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ int main()
}
```

ただしこのバグはコンテナの参照を返すメンバ関数(上記では`get_vector`)に[左辺値修飾](./ref_qualifier_for_this.md)することで防げる場合もある
ただしこのバグはコンテナの参照を返すメンバ関数(上記では`get_vector`)に[左辺値修飾](ref_qualifier_for_this.md)することで防げる場合もある

```cpp example
#include <initializer_list>
Expand Down Expand Up @@ -368,7 +368,7 @@ int main()
- [C++17 範囲forの制限緩和 — `begin` と `end` の型が異なることを許可](/lang/cpp17/generalizing_the_range-based_for_loop.md)
- [C++20 範囲for文がカスタマイゼーションポイントを見つけるルールを緩和](/lang/cpp20/relaxing_the_range_for_loop_customization_point_finding_rules.md)
- [C++23 範囲for文が範囲初期化子内で生じた一時オブジェクトを延命することを規定](/lang/cpp23/lifetime_extension_in_range_based_for_loop.md)
- [メンバ関数の左辺値/右辺値修飾](./ref_qualifier_for_this.md)
- [メンバ関数の左辺値/右辺値修飾](ref_qualifier_for_this.md)

## 参照
- [N2930 Range-Based For Loop Wording (Without Concepts)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ C++20のコンセプトの導入によって、コンセプトによって特殊

## <a id="relative-page" href="#relative-page">関連項目</a>

- [コンセプト](./concepts.md)
- [コンセプト](concepts.md)

## 参照

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ struct closure {

## 例

以下の例では、「[評価されない文脈でのラムダ式](./wording_for_lambdas_in_unevaluated_contexts.md)」による仕様を同時に用いている。
以下の例では、「[評価されない文脈でのラムダ式](wording_for_lambdas_in_unevaluated_contexts.md)」による仕様を同時に用いている。

### 連想コンテナの比較をカスタマイズする

Expand Down Expand Up @@ -161,10 +161,10 @@ set1 = set2; // C++17まではコンパイルエラー

ラムダ式は関数オブジェクトを生成する糖衣構文であるが、これらのことは対応する関数オブジェクトを直接書いた場合と一貫しておらず不便であるため、状態を持たないラムダ式に限ってデフォルト構築と代入が可能になるように変更された。

C++20では同時に[評価されない文脈にラムダ式を書くことができるようになった](./wording_for_lambdas_in_unevaluated_contexts.md)ため、この様な場合にラムダ式のクロージャ型を直接取得し渡すことができ、余計なコードをほとんど削減することができるようになる。
C++20では同時に[評価されない文脈にラムダ式を書くことができるようになった](wording_for_lambdas_in_unevaluated_contexts.md)ため、この様な場合にラムダ式のクロージャ型を直接取得し渡すことができ、余計なコードをほとんど削減することができるようになる。

## <a id="relative-page" href="#relative-page">関連項目</a>
- [評価されない文脈でのラムダ式](./wording_for_lambdas_in_unevaluated_contexts.md)
- [評価されない文脈でのラムダ式](wording_for_lambdas_in_unevaluated_contexts.md)

## 参照
- [P0624R2 Default constructible and assignable stateless lambdas](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0624r2.pdf)
2 changes: 1 addition & 1 deletion lang/cpp20/down_with_typename.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
* メンバ宣言
* メンバ宣言の中の引数宣言(デフォルト引数に現れる場合を除く)
* 識別子が修飾名である関数または関数テンプレートの引数宣言(デフォルト引数に現れる場合を除く)
* [ラムダ式](/lang/cpp11/lambda_expressions.md)または[requires式](./concepts.md)の引数宣言(デフォルト引数に現れる場合を除く)
* [ラムダ式](/lang/cpp11/lambda_expressions.md)または[requires式](concepts.md)の引数宣言(デフォルト引数に現れる場合を除く)
* 非型テンプレートパラメーターの宣言

```cpp
Expand Down
2 changes: 1 addition & 1 deletion lang/cpp20/wording_for_lambdas_in_unevaluated_contexts.md
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ C++17までは、ラムダ式をSFINAEの文脈で用いて擬似的なコンセ

この変更に伴う文言によってラムダ式を用いてSFINAEする事は完全に禁止され、評価されない文脈においてラムダ式の使用を制限する必要がなくなったため、C++20においてその制限を緩和することになった。

ただし、ラムダ式が外部リンケージを持つエンティティのシグネチャに現れる事は相変わらず禁止されている。ラムダ式を用いてSFINAEするなど、そのような事がしたい場合には[コンセプト](./concepts.md)を用いる事でより容易に目的を達成できる。
ただし、ラムダ式が外部リンケージを持つエンティティのシグネチャに現れる事は相変わらず禁止されている。ラムダ式を用いてSFINAEするなど、そのような事がしたい場合には[コンセプト](concepts.md)を用いる事でより容易に目的を達成できる。

## <a id="relative-page" href="#relative-page">関連項目</a>
- [状態を持たないラムダ式を、デフォルト構築可能、代入可能とする](/lang/cpp20/default_constructible_and_assignable_stateless_lambdas.md)
Expand Down
2 changes: 1 addition & 1 deletion reference/algorithm/ranges_fold_left.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ namespace std::ranges {
10 + 5 -> fold_left(rng, 0, +)
```

[`fold_right`](./ranges_fold_right.md)に対しては、入力範囲の先頭から末尾に向かって処理を進めていく点が異なる。
[`fold_right`](ranges_fold_right.md)に対しては、入力範囲の先頭から末尾に向かって処理を進めていく点が異なる。

## 引数

Expand Down
2 changes: 1 addition & 1 deletion reference/algorithm/ranges_fold_left_first.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ namespace std::ranges {
## 概要
初期値の指定を省略する[`fold_left`](./ranges_fold_left.md)。入力範囲の先頭要素が初期値として使用される。
初期値の指定を省略する[`fold_left`](ranges_fold_left.md)。入力範囲の先頭要素が初期値として使用される。
- (1) : 入力としてイテレータ範囲をとるオーバーロード
- (2) : 入力として範囲を直接とるオーバーロード
Expand Down
2 changes: 1 addition & 1 deletion reference/algorithm/ranges_fold_left_first_with_iter.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ namespace std::ranges {

## 概要

処理の過程で得られた終端位置を指すイテレータを同時に返す[`fold_left_first`](./ranges_fold_left_first.md)。入力範囲の先頭要素が初期値として使用され、戻り値はイテレータと処理結果のペアとなる。
処理の過程で得られた終端位置を指すイテレータを同時に返す[`fold_left_first`](ranges_fold_left_first.md)。入力範囲の先頭要素が初期値として使用され、戻り値はイテレータと処理結果のペアとなる。

- (1) : 入力としてイテレータ範囲をとるオーバーロード
- (2) : 入力として範囲を直接とるオーバーロード
Expand Down
2 changes: 1 addition & 1 deletion reference/algorithm/ranges_fold_left_with_iter.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ namespace std::ranges {
## 概要
処理の過程で得られた終端位置を指すイテレータを同時に返す[`fold_left`](./ranges_fold_left.md)。戻り値はイテレータと処理結果のペアとなる。
処理の過程で得られた終端位置を指すイテレータを同時に返す[`fold_left`](ranges_fold_left.md)。戻り値はイテレータと処理結果のペアとなる。
- (1) : 入力としてイテレータ範囲をとるオーバーロード
- (2) : 入力として範囲を直接とるオーバーロード
Expand Down
4 changes: 2 additions & 2 deletions reference/algorithm/ranges_fold_right.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ namespace std::ranges {
1 + 14 -> fold_right(rng, 0, +)
```

[`fold_left`](./ranges_fold_left.md)に対しては、入力範囲の末尾から先頭に向かって処理を進めていく点が異なる。
[`fold_left`](ranges_fold_left.md)に対しては、入力範囲の末尾から先頭に向かって処理を進めていく点が異なる。

## 引数

Expand Down Expand Up @@ -104,7 +104,7 @@ public:
};
```

すなわち、二項演算`F`の引数順が逆になることを除いて[`fold_left`](./ranges_fold_left.md)と同じ制約となる。
すなわち、二項演算`F`の引数順が逆になることを除いて[`fold_left`](ranges_fold_left.md)と同じ制約となる。

ただし、`fold_right`はその処理の都合上、入力範囲に対して[`bidirectional_range`](/reference/ranges/bidirectional_range.md)であることを要求する(`fold_left`は[`input_range`](/reference/ranges/input_range.md))。

Expand Down
4 changes: 2 additions & 2 deletions reference/algorithm/ranges_fold_right_last.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ namespace std::ranges {
## 概要
初期値の指定を省略する[`fold_right`](./ranges_fold_right.md)。入力範囲の末尾要素が初期値として使用される。
初期値の指定を省略する[`fold_right`](ranges_fold_right.md)。入力範囲の末尾要素が初期値として使用される。
- (1) : 入力としてイテレータ範囲をとるオーバーロード
- (2) : 入力として範囲を直接とるオーバーロード
Expand All @@ -41,7 +41,7 @@ namespace std::ranges {
`indirectly-binary-right-foldable`は`F`の引数順が逆になることを除いて[`indirectly-binary-left-foldable`](ranges_fold_left.md)と同様の制約となる。
`indirectly-binary-left-foldable`では、初期値の型`T`が戻り値型(積算値の型)`U`に変換可能であることが要求([`convertible_to`](/reference/concepts/convertible_to.md)`<T, U>`)されており、この関数では初期値の型を指定できない(`range_value_t<R>`が使用される)ため戻り値型を大きく制御することが困難になる(例えば、[`fold_right`](./ranges_fold_right.md)の例にある入力範囲を反転させる例の様なことは素直にはできない)。
`indirectly-binary-left-foldable`では、初期値の型`T`が戻り値型(積算値の型)`U`に変換可能であることが要求([`convertible_to`](/reference/concepts/convertible_to.md)`<T, U>`)されており、この関数では初期値の型を指定できない(`range_value_t<R>`が使用される)ため戻り値型を大きく制御することが困難になる(例えば、[`fold_right`](ranges_fold_right.md)の例にある入力範囲を反転させる例の様なことは素直にはできない)。
## 戻り値
Expand Down
2 changes: 1 addition & 1 deletion reference/concepts/copyable.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace std {

## 概要

`copyable`は、任意の型`T`が[`movable`](./movable.md)コンセプトを満たし、それに加えてコピー構築・代入が可能であることを表すコンセプトである。
`copyable`は、任意の型`T`が[`movable`](movable.md)コンセプトを満たし、それに加えてコピー構築・代入が可能であることを表すコンセプトである。

## 例
```cpp example
Expand Down
4 changes: 2 additions & 2 deletions reference/concepts/regular.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ namespace std {

## 概要

`regular`は、任意の型`T`が[`semiregular`](./semiregular.md)コンセプトを満たし、それに加えて等値比較可能であることを表すコンセプトである。
`regular`は、任意の型`T`が[`semiregular`](semiregular.md)コンセプトを満たし、それに加えて等値比較可能であることを表すコンセプトである。

## 正則性

Expand All @@ -28,7 +28,7 @@ namespace std {

このような正則な型とは、`int`型などの[基本型](/reference/type_traits/is_fundamental.md)の様に扱うことのできる型を表している。

ここから等値比較可能という性質を弱めたものは、[半正則](./semiregular.md)な型と呼ばれる。
ここから等値比較可能という性質を弱めたものは、[半正則](semiregular.md)な型と呼ばれる。

## 例
```cpp example
Expand Down
4 changes: 2 additions & 2 deletions reference/concepts/semiregular.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ namespace std {

## 概要

`semiregular`は、任意の型`T`が[`copyable`](./copyable.md)コンセプトを満たし、それに加えてデフォルト構築可能であることを表すコンセプトである。
`semiregular`は、任意の型`T`が[`copyable`](copyable.md)コンセプトを満たし、それに加えてデフォルト構築可能であることを表すコンセプトである。

半正則(*semiregular*)な型とは`int`型などの[基本型](/reference/type_traits/is_fundamental.md)の様に扱うことができる型を表しているが、`==`による等値比較が必ずしも可能ではない。

Expand Down Expand Up @@ -83,7 +83,7 @@ copyable is not semiregular
## 関連項目

- [C++20 コンセプト](/lang/cpp20/concepts.md)
- [`regular`](./regular.md)
- [`regular`](regular.md)

## 参照

Expand Down
4 changes: 2 additions & 2 deletions reference/ranges/cbegin.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ Rangeから先頭要素への読み取り専用イテレータを取得する関
1. `E`がlvalueであれば、[`ranges::begin`](begin.md)`(static_cast<const T&>(E))`
2. それ以外の場合、[`ranges::begin`](begin.md)`(static_cast<const T&&>(E))`
- C++23から
1. `E`が右辺値であり、[`enable_borrowed_range`](./enable_borrowed_range.md)`<remove_cv_t<T>>`が`false`となる場合、`ranges::cbegin(E)`は不適格
2. それ以外の場合、式`U`を[`ranges::begin`](begin.md)`(`[`possibly-const-range`](./possibly-const-range.md)`(t))`とすると、[`const_iterator`](/reference/iterator/const_iterator.md)`<decltype(U)>(U)`
1. `E`が右辺値であり、[`enable_borrowed_range`](enable_borrowed_range.md)`<remove_cv_t<T>>`が`false`となる場合、`ranges::cbegin(E)`は不適格
2. それ以外の場合、式`U`を[`ranges::begin`](begin.md)`(`[`possibly-const-range`](possibly-const-range.md)`(t))`とすると、[`const_iterator`](/reference/iterator/const_iterator.md)`<decltype(U)>(U)`

## 戻り値
先頭要素への読み取り専用イテレータ。
Expand Down
4 changes: 2 additions & 2 deletions reference/ranges/cdata.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ Rangeの要素が格納されたメモリ領域へのポインタを取得する
1. `E`がlvalueであれば、[`ranges::data`](data.md)`(static_cast<const T&>(E))`
2. それ以外の場合、[`ranges::data`](data.md)`(static_cast<const T&&>(E))`
- C++23から
1. `E`が右辺値であり、[`enable_borrowed_range`](./enable_borrowed_range.md)`<remove_cv_t<T>>`が`false`となる場合、`ranges::cdata(E)`は不適格
2. それ以外の場合、`as-const-pointer(`[`ranges::data`](data.md)`(`[`possibly-const-range`](./possibly-const-range.md)`(t)))`
1. `E`が右辺値であり、[`enable_borrowed_range`](enable_borrowed_range.md)`<remove_cv_t<T>>`が`false`となる場合、`ranges::cdata(E)`は不適格
2. それ以外の場合、`as-const-pointer(`[`ranges::data`](data.md)`(`[`possibly-const-range`](possibly-const-range.md)`(t)))`
- `as-const-pointer`は次のような説明専用関数テンプレートである
```cpp
template<class T>
Expand Down
4 changes: 2 additions & 2 deletions reference/ranges/cend.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ Rangeから、最後尾要素の次を指す読み取り専用イテレータも
1. `E`がlvalueであれば、[`ranges::end`](end.md)`(static_cast<const T&>(E))`
2. それ以外の場合、[`ranges::end`](end.md)`(static_cast<const T&&>(E))`
- C++23から
1. `E`が右辺値であり、[`enable_borrowed_range`](./enable_borrowed_range.md)`<remove_cv_t<T>>`が`false`となる場合、`ranges::cend(E)`は不適格
2. それ以外の場合、式`U`を[`ranges::end`](end.md)`(`[`possibly-const-range`](./possibly-const-range.md)`(t))`とすると、[`const_sentinel`](/reference/iterator/const_sentinel.md)`<decltype(U)>(U)`
1. `E`が右辺値であり、[`enable_borrowed_range`](enable_borrowed_range.md)`<remove_cv_t<T>>`が`false`となる場合、`ranges::cend(E)`は不適格
2. それ以外の場合、式`U`を[`ranges::end`](end.md)`(`[`possibly-const-range`](possibly-const-range.md)`(t))`とすると、[`const_sentinel`](/reference/iterator/const_sentinel.md)`<decltype(U)>(U)`

## 戻り値
最後尾要素の次を指す読み取り専用イテレータもしくは番兵。
Expand Down
4 changes: 2 additions & 2 deletions reference/ranges/crbegin.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ Rangeの末尾を指す読み取り専用逆イテレータを取得する関数
1. `E`がlvalueであれば、[`ranges::rbegin`](rbegin.md)`(static_cast<const T&>(E))`
2. それ以外の場合、[`ranges::rbegin`](rbegin.md)`(static_cast<const T&&>(E))`
- C++23から
1. `E`が右辺値であり、[`enable_borrowed_range`](./enable_borrowed_range.md)`<remove_cv_t<T>>`が`false`となる場合、`ranges::crbegin(E)`は不適格
2. それ以外の場合、式`U`を[`ranges::rbegin`](rbegin.md)`(`[`possibly-const-range`](./possibly-const-range.md)`(t))`とすると、[`const_iterator`](/reference/iterator/const_iterator.md)`<decltype(U)>(U)`
1. `E`が右辺値であり、[`enable_borrowed_range`](enable_borrowed_range.md)`<remove_cv_t<T>>`が`false`となる場合、`ranges::crbegin(E)`は不適格
2. それ以外の場合、式`U`を[`ranges::rbegin`](rbegin.md)`(`[`possibly-const-range`](possibly-const-range.md)`(t))`とすると、[`const_iterator`](/reference/iterator/const_iterator.md)`<decltype(U)>(U)`

## 戻り値
Rangeの末尾を指す読み取り専用逆イテレータ。
Expand Down
4 changes: 2 additions & 2 deletions reference/ranges/crend.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ Rangeの先頭の前を指す、読み取り専用逆イテレータもしくは
1. `E`がlvalueであれば、[`ranges::rend`](rend.md)`(static_cast<const T&>(E))`
2. それ以外の場合、[`ranges::rend`](rend.md)`(static_cast<const T&&>(E))`
- C++23から
1. `E`が右辺値であり、[`enable_borrowed_range`](./enable_borrowed_range.md)`<remove_cv_t<T>>`が`false`となる場合、`ranges::crend(E)`は不適格
2. それ以外の場合、式`U`を[`ranges::rend`](rend.md)`(`[`possibly-const-range`](./possibly-const-range.md)`(t))`とすると、[`const_sentinel`](/reference/iterator/const_sentinel.md)`<decltype(U)>(U)`
1. `E`が右辺値であり、[`enable_borrowed_range`](enable_borrowed_range.md)`<remove_cv_t<T>>`が`false`となる場合、`ranges::crend(E)`は不適格
2. それ以外の場合、式`U`を[`ranges::rend`](rend.md)`(`[`possibly-const-range`](possibly-const-range.md)`(t))`とすると、[`const_sentinel`](/reference/iterator/const_sentinel.md)`<decltype(U)>(U)`

## 戻り値
Rangeの先頭の前を指す、読み取り専用逆イテレータもしくは番兵。
Expand Down