diff --git a/reference/cmath/abs.md b/reference/cmath/abs.md index 12397ef4ef..7efe043487 100644 --- a/reference/cmath/abs.md +++ b/reference/cmath/abs.md @@ -50,6 +50,8 @@ namespace std { ## 備考 - $$ f(x) = | x | $$ +- (6), (7), (8) : 引数の絶対値が、戻り値の型で表現できない場合、未定義動作を引き起こす。 + - 一般的な2の補数表現のシステムにおいて、符号付き整数型の最小値(例:`int`における[`INT_MIN`](/reference/climits/int_min.md))の絶対値は、表現できる最大値([`INT_MAX`](/reference/climits/int_max.md))よりも1大きくなってしまうため、この未定義動作に該当する。 - 任意の整数型に対するオーバーロード(5)は C++11 で追加されたが、[一部の符号なし整数型に対して問題を引き起こす](http://wg21.cmeerw.net/lwg/issue2192)ことから C++17 で削除され、符号付き整数型に対するオーバーロード(6), (7), (8)が追加された - C++23では、(1), (2), (3)が(4)に統合され、拡張浮動小数点数型を含む浮動小数点数型へのオーバーロードとして定義された diff --git a/reference/cstdlib/abs.md b/reference/cstdlib/abs.md index 3ed633d177..cda9c3f690 100644 --- a/reference/cstdlib/abs.md +++ b/reference/cstdlib/abs.md @@ -63,6 +63,8 @@ namespace std { ## 備考 +- (1), (2), (3), (8), (9) : 引数の絶対値が、戻り値の型で表現できない場合、未定義動作を引き起こす。 + - 一般的な2の補数表現のシステムにおいて、符号付き整数型の最小値(例:`int`における[`INT_MIN`](/reference/climits/int_min.md))の絶対値は、表現できる最大値([`INT_MAX`](/reference/climits/int_max.md))よりも1大きくなってしまうため、この未定義動作に該当する。 - パラメータの型`X`において[`is_unsigned_v`](/reference/type_traits/is_unsigned.md)``が`true`であり、`X`が整数昇格によって`int`に変換できない場合、プログラムは不適格となる - Cとの互換性のため、`int`に昇格できる符号なし整数型は許可される - C++23では、(4), (5), (6)が(7)に統合され、拡張浮動小数点数型を含む浮動小数点数型へのオーバーロードとして定義された