- iterator[meta header]
- std[meta namespace]
- variable[meta id-type]
- cpp20[meta cpp]
namespace std {
template<class S, class I>
inline constexpr bool disable_sized_sentinel_for = false;
// reverse_iteratorに対する特殊化
template<class Iterator1, class Iterator2>
requires (!sized_sentinel_for<Iterator1, Iterator2>)
inline constexpr bool disable_sized_sentinel_for<reverse_iterator<Iterator1>,
reverse_iterator<Iterator2>> = true;
}
- sized_sentinel_for[link /reference/iterator/sized_sentinel_for.md]
- reverse_iterator[link /reference/iterator/reverse_iterator.md]
disable_sized_sentinel_for
は、任意のイテレータ型I
とその番兵型S
についてsized_sentinel_for
を無効化するカスタマイゼーションポイントである。
イテレータ型I, S
がsized_sentinel_for
を満たすがそのモデルとならない(意味論的な要件まで満足することができない)ようなイテレータをライブラリで使用するためのopt-outメカニズムとして提供されている。
I, S
がプログラム定義型である場合に、非配列型かつオブジェクト型であるI, S
に対して特殊化が許可される。
そのような特殊化は定数式で使用可能であり、const bool
型を持つ必要がある。
sized_sentinel_for
のサンプルコードを参照。
- C++20
- Clang: ??
- GCC: 10.1 [mark verified]
- Visual C++: 2019 Update 6 [mark verified]