- functional[meta header]
- std[meta namespace]
- variable[meta id-type]
- cpp11[meta cpp]
namespace std {
namespace placeholders {
unspecified _1;
unspecified _2;
…
unspecified _N;
}}- unspecified[italic]
_1、_2、…、_Nは、bind()で使用するプレースホルダーオブジェクトである。
それぞれ、bind()によって返された関数オブジェクトに指定する「第1引数」「第2引数」…「第N引数」であることを意味する。
各プレースホルダーオブジェクトの宣言は、可能ならば以下のように行われる。
inline constexpr unspecified _1;
そうできない場合、もしくはC++14までは次のように宣言される。
extern unspecified _1;
各placeholderの型は、デフォルト構築とコピー構築が可能であり、デフォルト・コピー・ムーブコンストラクタは例外を投げない。
また、それらの型がコピー代入可能であるかは処理系定義であるが、コピー代入可能な場合はその代入演算子も同様に例外を投げない。
C++20以降、それらのコンストラクタ及び代入演算子(定義されている場合)はconstexpr関数である。
プレースホルダーの数(Nの値)は、10以上実装することが推奨される。
- C++11
- LWG Issue 922. §
[func.bind.place]Number of placeholders- C++11で、処理系がサポートすべきプレースホルダーの数の推奨値 (10) が、処理系の制限の一覧に追加された
- P0607R0 Inline Variables for the Standard Library
- LWG Issue 2488. Placeholders should be allowed and encouraged to be constexpr