カスタマイズポイントオブジェクト (C++20以降)
From cppreference.com
[編集] 解説
名前cpoは、カスタマイズポイントオブジェクトを指します。これは、関数オブジェクトの定数かつリテラルなsemiregularクラス型のオブジェクトです。説明のために、その型のcv修飾されていないバージョンを__cpo_fnと表記します。
__cpo_fnのすべてのインスタンスは等価です。同じ引数に対して異なる__cpo_fn型のインスタンスを呼び出した際の効果は、インスタンスを表す式がlvalueかrvalueか、const修飾されているか否かに関わらず等価です(ただし、volatile修飾されたインスタンスは呼び出し可能である必要はありません)。したがって、cpoは自由にコピーでき、そのコピーは相互に交換可能に使用できます。
型のセットArgs...が与えられたとき、std::declval<Args>()...が上記のcpoの引数に対する要件を満たす場合、__cpo_fnは次をモデル化します:
- std::invocable<__cpo_fn, Args...>,
- std::invocable<const __cpo_fn, Args...>,
- std::invocable<__cpo_fn&, Args...>、および
- std::invocable<const __cpo_fn&, Args...>.
それ以外の場合、__cpo_fnの関数呼び出し演算子はオーバーロード解決に参加しません。
[編集] 関連項目
- RangeAdaptorObject (RAO)
- RangeAdaptorClosureObject (RACO)