Skip to content

Commit 22a02d4

Browse files
committed
functional/function_ref: some refinement(#1192)
1 parent 0a6aa59 commit 22a02d4

File tree

3 files changed

+11
-6
lines changed

3 files changed

+11
-6
lines changed

reference/functional/function_ref.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ namespace std {
1616
1717
## 概要
1818
`function_ref`クラステンプレートは、パラメータの型リスト`ArgTypes...`、戻り値の型`R`に合致する、あらゆる関数ポインタ、関数オブジェクト、メンバ関数ポインタ、メンバ変数ポインタを参照できるクラスである。
19+
メンバ関数やメンバ変数に対してオブジェクトを束縛、関数ポインタや関数オブジェクトに対して第1引数を束縛した状態で参照することもできる。
1920
2021
下記全ての組み合わせ(4種類)に対して、クラステンプレートの部分特殊化が提供される。
2122

reference/functional/function_ref/op_constructor.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,16 @@ constexpr function_ref(const function_ref&) noexcept = default; // (6)
3434
3535
3636
## テンプレートパラメータ制約
37+
`function_ref`クラステンプレートパラメータのCV修飾子 *cv* に応じて
38+
3739
- (1) : [`is_function`](/reference/type_traits/is_function.md)`<F>`が`true`、かつ`is-invocable-using<F>`が`true`であること
38-
- (2) : `T`を`remove_refernce_t<F>`としたとき
39-
- `remove_cvref_t<F>`が`function_ref`と同一型ではなく、かつ
40-
- [`is_member_pointer_v`](/reference/type_traits/is_member_pointer.md)`T`が`false`であり、かつ
40+
- (2) : `T`を[`remove_refernce_t`](/reference/type_traits/remove_reference.md)`<F>`としたとき
41+
- [`remove_cvref_t`](/reference/type_traits/remove_cvref.md)`<F>`が`function_ref`と同一型ではなく、かつ
42+
- [`is_member_pointer_v`](/reference/type_traits/is_member_pointer.md)`<T>`が`false`であり、かつ
4143
- `is-invocable-using</*cv*/ T&>`が`true`であること
4244
- (3) : `F`を`decltype(f)`としたとき
4345
- `is-invocable-using<F>`が`true`であること
44-
- (4) : `T`を`remove_refernce_t<F>`、`F`を`F`を`decltype(f)`としたとき
46+
- (4) : `T`を[`remove_refernce_t`](/reference/type_traits/remove_reference.md)`<F>`、`F`を`decltype(f)`としたとき
4547
- [`is_rvalue_reference_v`](/reference/type_traits/is_rvalue_reference.md)`<U&&>`が`false`であり、かつ
4648
- `is-invocable-using<F, /*cv*/ T&>`が`true`であること
4749
- (5) : `F`を`decltype(f)`としたとき
@@ -57,6 +59,8 @@ constexpr function_ref(const function_ref&) noexcept = default; // (6)
5759
5860
5961
## 効果
62+
`function_ref`クラステンプレートパラメータのCV修飾子 *cv* に応じて
63+
6064
- (1) : `bound-entity`を`f`で、`thunk-ptr`を説明専用の関数`thunk`へのアドレスで初期化する。
6165
- [関数呼び出し`thunk(bound-entity, call-args...)`](op_call.md)は[`invoke_r`](/reference/functional/invoke_r.md)`<R>(f, call-args...)`と等価。
6266
- (2) : `bound-entity`を[`addressof`](/reference/memory/addressof.md)`(f)`で、`thunk-ptr`を説明専用の関数`thunk`へのアドレスで初期化する。

reference/functional/function_ref/op_deduction_guide.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ namespace std {
3636
## 備考
3737
- (2) : `F`を[`remove_pointer_t`](/reference/type_traits/remove_pointer.md)`<decltype(f)>`としたとき、型`function_ref<F>`に推論される。
3838
- (3) : 型`function_ref<R(A...) noexcept(E)>`に推論される。
39-
- `F`が`M G::*`の形式のとき、`R`は[`invoke_result_t`](/reference/type_traits/invoke_result.md)`<F, T&>`、`A...`は空のパック、`E`は`false`とする。
40-
- それ以外の形式のときは、テンプレートパラメータ制約の説明を参照。
39+
- `F`が`M G::*`の形式のとき、`R`は[`invoke_result_t`](/reference/type_traits/invoke_result.md)`<F, T&>`、`A...`は空のパック、`E`は`false`とする。
40+
- それ以外の形式のときは、テンプレートパラメータ制約の説明を参照。
4141
4242
4343
## 例

0 commit comments

Comments
 (0)