namespace std {
template<class T>
inline constexpr bool is-integer-like = /*see below*/;
template<class T>
inline constexpr bool is-signed-integer-like = /*see below*/;
}
概要
これらの説明専用の変数テンプレートは、任意の型T
が符号付/なし整数型そのものあるいはそれと同様に扱える型である場合にtrue
を示すものである。
これは標準ライブラリ内において、イテレータの差分型(difference_type
)として実装定義の整数型の使用を許可するためにコンセプトの文脈で使用される。
効果
is-integer-like<T>
はT
がintegral
のモデルとなるかinteger-classである時にtrue
を示す。
is-signed-integer-like<T>
はT
がsigned_integral
のモデルとなるかsigned-integer-classである時にtrue
を示す。
(signed-)integer-class型
integer-class型は組み込みの整数型と同じように動作する実装定義のクラス型である。
integer-class型の表現可能な範囲はそれが定義する値の連続集合であり、0
と1
を必ず含んでいなければならない。この時、その範囲に負の数が含まれていればその型はsigned-integer-class型であり、それ以外のものはunsigned-integer-class型である。
要件
I
をあるinteger-class型、B
を少なくともI
と同じ範囲の値を表現可能で同じ幅を持つ別のinteger-class型とする。
I
の値a, b
、a, b
それぞれと同じ値を表現するB
の値x, y
と任意の整数型の値c
について次のことが成り立つ。
- 式
@x
が適格である全ての単項演算子@
について@a
もまた適格であり、共に同じ値、効果、値カテゴリを持つ。@x
がbool
型を示す場合@a
もまたbool
型を示すが。@x
がB
を示す場合は@a
はI
を示す。 - 式
c @= x
が適格である全ての(複合)代入演算子@=
についてc @= a
もまた適格であり、共に同じ値、効果を持つ。式c @= a
の結果はc
を参照するlvalueとなる。 - 式
x @ y
が適格である全ての二項演算子@
についてa @ b
もまた適格であり、結果の値をI
が表現できる場合は共に同じ値、効果、値カテゴリを持つ。x @ y
がbool
型を示す場合a @ b
もまたbool
型を示すが。x @ y
がB
を示す場合はa @ b
はI
を示す。 - integer-class型の値は任意の整数型に明示的に変換でき、任意の整数型の値はinteger-class型に暗黙的にも明示的にも変換できる。それらの変換は例外を送出しない。
- integer-class型の式
E
はbool(E != I(0))
のように文脈的にbool
に変換できる。 - integer-class型は
regular
及びtotally_ordered
のモデルとなる。 - 値初期化されたinteger-class型の値は
0
になる。
integer-class型I
についてnumeric_limits<I>
の特殊化は次のような値を示す。
numeric_limits<I>::is_specialized == true
numeric_limits<I>::is_signed== true
I
がsigned-integer-class型の場合のみ
numeric_limits<I>::digits
はI
の幅と等しいnumeric_limits<I>::digits10
はstatic_cast<int>(digits * log10(2))
と等しいnumeric_limits<I>::min()
とnumeric_limits<I>::max()
はそれぞれ、I
の表現可能な値の最小値と最大値を返す。numeric_limits<I>::lowest()
はnumeric_limits<I>::max()
を返す。
バージョン
言語
- C++20
関連項目
weakly_incrementable
iota_view