Skip to content

Commit daf7534

Browse files
committed
functionのコンストラクタ : C++23でのfunction(F)からfunction(F&&)への変更を記載 #1358
1 parent 00b8c13 commit daf7534

File tree

1 file changed

+47
-10
lines changed

1 file changed

+47
-10
lines changed

reference/functional/function/op_constructor.md

Lines changed: 47 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,17 @@
66
* cpp11[meta cpp]
77

88
```cpp
9-
function() noexcept; // (1)
10-
function(nullptr_t) noexcept; // (2)
11-
function(const function& f); // (3)
9+
function() noexcept; // (1) C++11
10+
function(nullptr_t) noexcept; // (2) C++11
11+
function(const function& f); // (3) C++11
1212

13-
function(function&& f); // (4) C++17まで
13+
function(function&& f); // (4) C++11
1414
function(function&& f) noexcept; // (4) C++20
1515

1616
template <class F>
17-
function(F&& f); // (5)
17+
function(F f); // (5) C++11
18+
template <class F>
19+
function(F&& f); // (5) C++23
1820

1921
template <class Alloc>
2022
function(allocator_arg_t, const Alloc& alloc) noexcept; // (6) C++17で削除
@@ -34,11 +36,44 @@ function(allocator_arg_t, const Alloc& alloc, F f); // (10) C++17
3436
* nullptr_t[link /reference/cstddef/nullptr_t.md]
3537
* allocator_arg_t[link /reference/memory/allocator_arg_t.md]
3638
37-
## 要件
38-
- (5), (10) :
39-
- `F`はコピー構築可能であること。
40-
- `F`のコピーコンストラクタとデストラクタは、例外を投げるべきではない。
41-
- C++11まで : `F`は、パラメータとして`ArgTypes...`型をとり、戻り値として`R`型を返す関数ポインタ、メンバ関数ポインタ、メンバ変数ポインタ、または関数オブジェクトであること。
39+
## 概要
40+
`function`オブジェクトを構築する。
41+
42+
- (1) : デフォルト構築。空の`function`オブジェクトを構築する
43+
- (2) : `nullptr`からの構築。空の`function`オブジェクトを構築する
44+
- (3) : コピー構築する
45+
- (4) : ムーブ構築する
46+
- (5) : 任意の型の関数ポインタ、メンバポインタ、関数オブジェクトを受け取って構築する
47+
- (6) : アロケータをとって空の`function`オブジェクトを構築する
48+
- (7) : アロケータと`nullptr`をとって空の`function`オブジェクトを構築する
49+
- (8) : アロケータをとってコピー構築する
50+
- (9) : アロケータをとってムーブ構築する
51+
- (10) : アロケータと、任意の型の関数ポインタ、メンバポインタ、関数オブジェクトを受け取って構築する
52+
53+
54+
## テンプレートパラメータ制約
55+
[`decay_t`](/reference/type_traits/decay.md)`<F>`を`FD`として、
56+
57+
- (5) :
58+
- C++11
59+
- `F`は、パラメータとして`ArgTypes...`型をとり、戻り値として`R`型を返す関数ポインタ、メンバ関数ポインタ、メンバ変数ポインタ、または関数オブジェクトであること
60+
- C++23
61+
- `F`が`function`ではないこと
62+
- `FD`は、パラメータとして`ArgTypes...`型をとり、戻り値として`R`型を返す関数ポインタ、メンバ関数ポインタ、メンバ変数ポインタ、または関数オブジェクトであること
63+
- (10) :
64+
- `F`はコピー構築可能であること
65+
- `F`のコピーコンストラクタとデストラクタは、例外を投げるべきではない
66+
- `F`は、パラメータとして`ArgTypes...`型をとり、戻り値として`R`型を返す関数ポインタ、メンバ関数ポインタ、メンバ変数ポインタ、または関数オブジェクトであること
67+
68+
69+
## 適格要件
70+
- (5) :
71+
- C++11
72+
- `F`はコピー構築可能であること
73+
- `F`は、パラメータとして`ArgTypes...`型をとり、戻り値として`R`型を返す関数ポインタ、メンバ関数ポインタ、メンバ変数ポインタ、または関数オブジェクトであること。
74+
- C++23
75+
- `FD`はコピー構築可能であること
76+
- `FD`は`F`から構築可能であること
4277
4378
4479
## 効果
@@ -242,3 +277,5 @@ int main()
242277
- C++14から、(5)と(10)でシグニチャが合わない関数オブジェクトが渡された場合に、SFINAEされるようになった。
243278
- [P0302R1 Removing Allocator Support in `std::function` (rev 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0302r1.html)
244279
- [P0771R1 std::function move constructor should be noexcept](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0771r1.pdf)
280+
- [LWG Issue 2774. `std::function` construction vs assignment](https://cplusplus.github.io/LWG/issue2774)
281+
- C++23から、`function(F)`のオーバーロードが`function(F&&)`に変更された

0 commit comments

Comments
 (0)