Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion lang/cpp26.md
Original file line number Diff line number Diff line change
Expand Up @@ -575,4 +575,15 @@ C++26とは、2026年中に改訂される予定の、C++バージョンの通


## 取り決め
- C言語の参照をC17からC23に更新
- C言語の参照をC17からC23に更新。これにともない、Cライブラリ由来のヘッダに以下の変更が入った
- [`<cstdlib>`](/reference/cstdlib.md): [`free_sized()`](/reference/cstdlib/free_sized.md)・[`free_aligned_sized()`](/reference/cstdlib/free_aligned_sized.md)・[`memalignment()`](/reference/cstdlib/memalignment.md)・[`strfromf()`](/reference/cstdlib/strfromf.md)・[`strfromd()`](/reference/cstdlib/strfromd.md)・[`strfroml()`](/reference/cstdlib/strfroml.md)を追加。[`bsearch()`](/reference/cstdlib/bsearch.md)に`const`版オーバーロードを追加。[`realloc()`](/reference/cstdlib/realloc.md)にサイズ`0`を渡した場合がエラー性動作となった
- [`<ctime>`](/reference/ctime.md): [`timespec_getres()`](/reference/ctime/timespec_getres.md)・`timegm()`・`gmtime_r()`・`localtime_r()`と、`TIME_MONOTONIC`・`TIME_ACTIVE`・`TIME_THREAD_ACTIVE`・`__STDC_VERSION_TIME_H__`を追加。`asctime()`・`ctime()`を非推奨化
- [`<cmath>`](/reference/cmath.md): [`nextup()`](/reference/cmath/nextup.md)・[`nextdown()`](/reference/cmath/nextdown.md)を追加
- [`<cstdio>`](/reference/cstdio.md): `_PRINTF_NAN_LEN_MAX`・`__STDC_VERSION_STDIO_H__`を追加
- [`<cinttypes>`](/reference/cinttypes.md): 2進数用の書式指定マクロ (`PRIb`*N*・`SCNb`*N*等) と`__STDC_VERSION_INTTYPES_H__`を追加
- [`<cfloat>`](/reference/cfloat.md): [`INFINITY`](/reference/cmath/infinity.md)・[`NAN`](/reference/cmath/nan.md)・[`FLT_SNAN`](/reference/cfloat/flt_snan.md)・[`DBL_SNAN`](/reference/cfloat/dbl_snan.md)・[`LDBL_SNAN`](/reference/cfloat/ldbl_snan.md)・`__STDC_VERSION_FLOAT_H__`を追加。[`DECIMAL_DIG`](/reference/cfloat/decimal_dig.md)を非推奨化し、[`FLT_HAS_SUBNORM`](/reference/cfloat/flt_has_subnorm.md)・[`DBL_HAS_SUBNORM`](/reference/cfloat/dbl_has_subnorm.md)・[`LDBL_HAS_SUBNORM`](/reference/cfloat/ldbl_has_subnorm.md)を廃止予定 (obsolescent) とした
- [`<climits>`](/reference/climits.md): 各整数型の幅 (ビット数) を表す[`BOOL_WIDTH`](/reference/climits/bool_width.md)等のマクロを追加
- [`<cstdint>`](/reference/cstdint.md): 各整数型の幅 (ビット数) を表す[`INT8_WIDTH`](/reference/cstdint/int8_width.md)等のマクロと、`__STDC_VERSION_STDINT_H__`を追加
- [`<cstring>`](/reference/cstring.md): `memccpy()`・`strdup()`・`strndup()`・`memset_explicit()`を追加
- [`<cuchar>`](/reference/cuchar.md): `mbrtoc8()`・`c8rtomb()`・`__STDC_VERSION_UCHAR_H__`を追加
- [`<cstddef>`](/reference/cstddef.md): `unreachable`マクロおよび`__STDC_VERSION_STDDEF_H__`は定義しないことを明記
4 changes: 2 additions & 2 deletions reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@
| [`<cerrno>`](/reference/cerrno.md) | エラー番号 | |
| [`<cfenv>`](/reference/cfenv.md) | 浮動小数点環境へのアクセス | C++11 (C99) |
| [`<cfloat>`](/reference/cfloat.md) | 浮動小数点数の定数 | |
| `<cinttypes>` | 固定精度整数のための書式指定マクロ | C++11 (C99) |
| [`<cinttypes>`](/reference/cinttypes.md) | 固定精度整数のための書式指定マクロ | C++11 (C99) |
| `<ciso646>` | `&&`に対する別名`and`のような、各種演算子に対するマクロを定義する。<br/> ただしC++ではこれらの別名はキーワードとして定義されるため、このヘッダでは何も定義されない。 | C++20で削除 |
| [`<climits>`](/reference/climits.md) | 整数型の最小値、最大値を表すマクロ | |
| [`<clocale>`](/reference/clocale.md) | ロケール | |
Expand All @@ -244,7 +244,7 @@
| [`<cstring>`](/reference/cstring.md) | 文字列操作 | |
| `<ctgmath>` | ジェネリックな数学関数 | C++11 (C99)<br/> C++17で非推奨<br/> C++20で削除 |
| [`<ctime>`](/reference/ctime.md) | 日付・時間 | |
| `<cuchar>` | ユニコード文字型 | C++11 (C11) |
| [`<cuchar>`](/reference/cuchar.md) | ユニコード文字型 | C++11 (C11) |
| `<cwchar>` | ワイド文字型 | |
| `<cwctype>` | ワイド文字の種別と判定 | |

Expand Down
28 changes: 24 additions & 4 deletions reference/cfloat.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ NaN とは非数(Not-a-Number)を表し、ほとんど全ての演算で浮
| [`FLT_DECIMAL_DIG`](cfloat/flt_decimal_dig.md) | `float`の数値を10進数で正確に表すのに必要な有効数字の桁数。<br/>上記モデルでは、$b$ が $10$ の累乗の場合、$p \log_{10} b$、それ以外の場合、$\lceil 1 + p \log_{10} b\rceil$ | C++17 |
| [`DBL_DECIMAL_DIG`](cfloat/dbl_decimal_dig.md) | `double`の数値を10進数で正確に表すのに必要な有効数字の桁数。<br/>上記モデルでは、$b$ が $10$ の累乗の場合、$p \log_{10} b$、それ以外の場合、$\lceil 1 + p \log_{10} b\rceil$ | C++17 |
| [`LDBL_DECIMAL_DIG`](cfloat/ldbl_decimal_dig.md) | `long double`の数値を10進数で正確に表すのに必要な有効数字の桁数。<br/>上記モデルでは、$b$ が $10$ の累乗の場合、$p \log_{10} b$、それ以外の場合、$\lceil 1 + p \log_{10} b\rceil$ | C++17 |
| [`DECIMAL_DIG`](cfloat/decimal_dig.md) | 精度が一番高い浮動小数点型の数値を10進数で正確に表すのに必要な有効数字の桁数。<br/>上記モデルでは、$p_{\rm max}$ を精度が一番高い浮動小数点型の $p$ とすると、$b$ が $10$ の累乗の場合、$p_{\rm max} \log_{10} b$、それ以外の場合、$\lceil 1 + p_{\rm max}\log_{10} b\rceil$ | C++11 |
| [`DECIMAL_DIG`](cfloat/decimal_dig.md) | 精度が一番高い浮動小数点型の数値を10進数で正確に表すのに必要な有効数字の桁数。<br/>上記モデルでは、$p_{\rm max}$ を精度が一番高い浮動小数点型の $p$ とすると、$b$ が $10$ の累乗の場合、$p_{\rm max} \log_{10} b$、それ以外の場合、$\lceil 1 + p_{\rm max}\log_{10} b\rceil$ | C++11<br/> C++26で非推奨 |
| [`FLT_MANT_DIG`](cfloat/flt_mant_dig.md) | `float`を基数 [`FLT_RADIX`](cfloat/flt_radix.md) で表現した際の仮数部の桁数。<br/>上記モデルでは、$p$ | |
| [`DBL_MANT_DIG`](cfloat/dbl_mant_dig.md) | `double`を基数 [`FLT_RADIX`](cfloat/flt_radix.md) で表現した際の仮数部の桁数。<br/>上記モデルでは、$p$ | |
| [`LDBL_MANT_DIG`](cfloat/ldbl_mant_dig.md) | `long double`を基数 [`FLT_RADIX`](cfloat/flt_radix.md) で表現した際の仮数部の桁数。<br/>上記モデルでは、$p$ | |
Expand All @@ -76,9 +76,27 @@ NaN とは非数(Not-a-Number)を表し、ほとんど全ての演算で浮

| マクロ | 説明 | 対応バージョン |
|--------|------|----------------|
| [`FLT_HAS_SUBNORM`](cfloat/flt_has_subnorm.md) | `float`における非正規化数のサポート状況を判定する | C++17 |
| [`DBL_HAS_SUBNORM`](cfloat/dbl_has_subnorm.md) | `double`における非正規化数のサポート状況を判定する | C++17 |
| [`LDBL_HAS_SUBNORM`](cfloat/ldbl_has_subnorm.md) | `long double`における非正規化数のサポート状況を判定する | C++17 |
| [`FLT_HAS_SUBNORM`](cfloat/flt_has_subnorm.md) | `float`における非正規化数のサポート状況を判定する | C++17<br/> C++26で非推奨 |
| [`DBL_HAS_SUBNORM`](cfloat/dbl_has_subnorm.md) | `double`における非正規化数のサポート状況を判定する | C++17<br/> C++26で非推奨 |
| [`LDBL_HAS_SUBNORM`](cfloat/ldbl_has_subnorm.md) | `long double`における非正規化数のサポート状況を判定する | C++17<br/> C++26で非推奨 |


## 無限大とNaN

| マクロ | 説明 | 対応バージョン |
|--------|------|----------------|
| [`INFINITY`](/reference/cmath/infinity.md) | `float`型の正の無限大 | C++26で`<cfloat>`に追加 |
| [`NAN`](/reference/cmath/nan.md) | `float`型のquiet NaN | C++26で`<cfloat>`に追加 |
| [`FLT_SNAN`](cfloat/flt_snan.md) | `float`型のシグナルNaN | C++26 |
| [`DBL_SNAN`](cfloat/dbl_snan.md) | `double`型のシグナルNaN | C++26 |
| [`LDBL_SNAN`](cfloat/ldbl_snan.md) | `long double`型のシグナルNaN | C++26 |


## バージョン情報

| マクロ | 説明 | 対応バージョン |
|--------|------|----------------|
| `__STDC_VERSION_FLOAT_H__` | `<cfloat>`が提供するC標準ライブラリ機能のバージョン (`202311L`) | C++26 |


## 最大値
Expand Down Expand Up @@ -117,3 +135,5 @@ NaN とは非数(Not-a-Number)を表し、ほとんど全ての演算で浮
## 参照
- [P0063R3 C++17 should refer to C11 instead of C99](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0063r3.html)
- [P0175R1 Synopses for the C library](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0175r1.html)
- [P3348R4 C++26 should refer to C23 not C17](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3348r4.html)
- C++26がC23を参照するようになり、`INFINITY`・`NAN`・`FLT_SNAN`・`DBL_SNAN`・`LDBL_SNAN`・`__STDC_VERSION_FLOAT_H__`が追加された。`DECIMAL_DIG`が非推奨となり、`FLT_HAS_SUBNORM`・`DBL_HAS_SUBNORM`・`LDBL_HAS_SUBNORM`が廃止予定 (obsolescent) となった
15 changes: 15 additions & 0 deletions reference/cfloat/dbl_has_subnorm.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,15 @@
* cfloat[meta header]
* macro[meta id-type]
* cpp17[meta cpp]
* cpp26deprecated[meta cpp]

```cpp
#define DBL_HAS_SUBNORM implementation-defined
```

このマクロは、C++26で廃止予定 (obsolescent) となった。


## 概要
`DBL_HAS_SUBNORM` は、`double`型における非正規化数のサポート状況を表すマクロである。

Expand All @@ -27,6 +31,15 @@
- このマクロは、非正規化数を表現できる場合の、浮動小数点数の正の最小値を表す[`DBL_TRUE_MIN`](dbl_true_min.md)のために定義された


## 非推奨・削除の詳細
このマクロはコンパイル時定数として非正規化数のサポート状況を取得するものであったが、これは必ずしもコンパイル時に確定する値ではなく、有用でないため廃止予定 (obsolescent) となった:

- ハードウェアによっては非正規化数をソフトウェアエミュレーションでサポートする場合があり、サポート状況が判定できず`-1` (indeterminable) となることがある
- ハードウェアサポートがある場合でも、実行時のフラグ切り替えによって非正規化数をゼロにフラッシュ (flush-to-zero) するよう設定できるため、サポート状況がコンパイル時に確定しない場合がある

C++23では、対応する[`std::numeric_limits`](/reference/limits/numeric_limits.md)`<double>::`[`has_denorm`](/reference/limits/numeric_limits/has_denorm.md)が同じ理由ですでに非推奨となっている。


## 例
```cpp example
#include <iostream>
Expand Down Expand Up @@ -64,3 +77,5 @@ int main()
- [WG14/N1378 `xxx_TRUE_MIN` macros for `<float.h>`](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1378.htm)
- [P0063R3 C++17 should refer to C11 instead of C99](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0063r3.html)
- [P0175R1 Synopses for the C library](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0175r1.html)
- [P3348R4 C++26 should refer to C23 not C17](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3348r4.html)
- C++26がC23を参照するようになり、このマクロが廃止予定 (obsolescent) となった
61 changes: 61 additions & 0 deletions reference/cfloat/dbl_snan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# DBL_SNAN
* cfloat[meta header]
* macro[meta id-type]
* cpp26[meta cpp]

```cpp
#define DBL_SNAN see below
```

## 概要
`double`型のシグナルNaN (signaling NaN) を表す定数式マクロ。

[`std::numeric_limits`](/reference/limits/numeric_limits.md)`<double>::`[`signaling_NaN`](/reference/limits/numeric_limits/signaling_nan.md)`()`と等しい。

C23で`<float.h>`に追加されたマクロであり、C++26で`<cfloat>`に取り込まれた。


## 備考
- シグナルNaNがサポートされない場合、このマクロは定義されない


## 例
```cpp example
#include <iostream>
#include <cfloat>
#include <cmath>

int main()
{
double x = DBL_SNAN;
std::cout << std::boolalpha << std::isnan(x) << std::endl;
}
```
* DBL_SNAN[color ff0000]
* std::isnan[link /reference/cmath/isnan.md]

### 出力
```
true
```


## バージョン
### 言語
- C++26

### 処理系
- [Clang](/implementation.md#clang): 22 [mark noimpl]
- [GCC](/implementation.md#gcc): 16.1 [mark noimpl]
- [Visual C++](/implementation.md#visual_cpp): 2026 Update 2 [mark noimpl]


## 関連項目
- [`FLT_SNAN`](flt_snan.md): `float`型のシグナルNaN
- [`LDBL_SNAN`](ldbl_snan.md): `long double`型のシグナルNaN
- [`NAN`](/reference/cmath/nan.md): `float`型のquiet NaN


## 参照
- [P3348R4 C++26 should refer to C23 not C17](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3348r4.html)
- C++26がC23を参照するようになり、このマクロが`<cfloat>`に追加された
19 changes: 19 additions & 0 deletions reference/cfloat/decimal_dig.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,16 @@
* cfloat[meta header]
* macro[meta id-type]
* cpp11[meta cpp]
* cpp26deprecated[meta cpp]
* [mathjax enable]

```cpp
#define DECIMAL_DIG implementation-defined
```
このマクロは、C++26で非推奨となった。型ごとの桁数を示す[`FLT_DECIMAL_DIG`](flt_decimal_dig.md)・[`DBL_DECIMAL_DIG`](dbl_decimal_dig.md)・[`LDBL_DECIMAL_DIG`](ldbl_decimal_dig.md)を使用すること。
## 概要
精度が一番高い浮動小数点型の数値を10進数で正確に表すのに必要な有効数字の桁数を表すマクロ。
より正確には、精度が一番高い浮動小数点型のあらゆる数値を、$n$ 桁の10進数に変換し、また元に戻した場合に値が変わらないような最小の整数値 $n$ を表すマクロ。
Expand Down Expand Up @@ -37,6 +41,16 @@ $b$ や $p$ については [`<cfloat>`](../cfloat.md) のモデルも参照。
- [`LDBL_DECIMAL_DIG`](ldbl_decimal_dig.md)
## 非推奨・削除の詳細
C言語側で対応するマクロが非推奨となったため、C++側でも非推奨とする。
このマクロは、精度が一番高い浮動小数点型のみを対象とする値であり、実質的に[`LDBL_DECIMAL_DIG`](ldbl_decimal_dig.md)と同じものであった。型ごとに必要な桁数は異なるため、すべての浮動小数点型に対して単一の値を使用するこのマクロよりも、型ごとの桁数を表す以下のマクロを使用するほうが正確である:
- [`FLT_DECIMAL_DIG`](flt_decimal_dig.md) (`float`用)
- [`DBL_DECIMAL_DIG`](dbl_decimal_dig.md) (`double`用)
- [`LDBL_DECIMAL_DIG`](ldbl_decimal_dig.md) (`long double`用)
## 例
```cpp example
#include <iostream>
Expand Down Expand Up @@ -81,3 +95,8 @@ int main()
- [Visual C++](/implementation.md#visual_cpp): 2013 [mark verified], 2015 [mark verified]
- 2013は、正しく実装されていない。C++11での最低値である10と定義されている。しかし、`double`および`long double`がIEEE 754倍精度で実装されているため、少なくとも17以上でなければならない。
- 2015は、正しく17と定義されている。
## 参照
- [P3348R4 C++26 should refer to C23 not C17](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3348r4.html)
- C++26がC23を参照するようになり、このマクロが非推奨となった
15 changes: 15 additions & 0 deletions reference/cfloat/flt_has_subnorm.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,15 @@
* cfloat[meta header]
* macro[meta id-type]
* cpp17[meta cpp]
* cpp26deprecated[meta cpp]

```cpp
#define FLT_HAS_SUBNORM implementation-defined
```

このマクロは、C++26で廃止予定 (obsolescent) となった。


## 概要
`FLT_HAS_SUBNORM` は、`float`型における非正規化数のサポート状況を表すマクロである。

Expand All @@ -27,6 +31,15 @@
- このマクロは、非正規化数を表現できる場合の、浮動小数点数の正の最小値を表す[`FLT_TRUE_MIN`](flt_true_min.md)のために定義された


## 非推奨・削除の詳細
このマクロはコンパイル時定数として非正規化数のサポート状況を取得するものであったが、これは必ずしもコンパイル時に確定する値ではなく、有用でないため廃止予定 (obsolescent) となった:

- ハードウェアによっては非正規化数をソフトウェアエミュレーションでサポートする場合があり、サポート状況が判定できず`-1` (indeterminable) となることがある
- ハードウェアサポートがある場合でも、実行時のフラグ切り替えによって非正規化数をゼロにフラッシュ (flush-to-zero) するよう設定できるため、サポート状況がコンパイル時に確定しない場合がある

C++23では、対応する[`std::numeric_limits`](/reference/limits/numeric_limits.md)`<float>::`[`has_denorm`](/reference/limits/numeric_limits/has_denorm.md)が同じ理由ですでに非推奨となっている。


## 例
```cpp example
#include <iostream>
Expand Down Expand Up @@ -64,3 +77,5 @@ int main()
- [WG14/N1378 `xxx_TRUE_MIN` macros for `<float.h>`](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1378.htm)
- [P0063R3 C++17 should refer to C11 instead of C99](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0063r3.html)
- [P0175R1 Synopses for the C library](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0175r1.html)
- [P3348R4 C++26 should refer to C23 not C17](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3348r4.html)
- C++26がC23を参照するようになり、このマクロが廃止予定 (obsolescent) となった
61 changes: 61 additions & 0 deletions reference/cfloat/flt_snan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# FLT_SNAN
* cfloat[meta header]
* macro[meta id-type]
* cpp26[meta cpp]

```cpp
#define FLT_SNAN see below
```

## 概要
`float`型のシグナルNaN (signaling NaN) を表す定数式マクロ。

[`std::numeric_limits`](/reference/limits/numeric_limits.md)`<float>::`[`signaling_NaN`](/reference/limits/numeric_limits/signaling_nan.md)`()`と等しい。

C23で`<float.h>`に追加されたマクロであり、C++26で`<cfloat>`に取り込まれた。


## 備考
- シグナルNaNがサポートされない場合、このマクロは定義されない


## 例
```cpp example
#include <iostream>
#include <cfloat>
#include <cmath>

int main()
{
float x = FLT_SNAN;
std::cout << std::boolalpha << std::isnan(x) << std::endl;
}
```
* FLT_SNAN[color ff0000]
* std::isnan[link /reference/cmath/isnan.md]

### 出力
```
true
```


## バージョン
### 言語
- C++26

### 処理系
- [Clang](/implementation.md#clang): 22 [mark noimpl]
- [GCC](/implementation.md#gcc): 16.1 [mark noimpl]
- [Visual C++](/implementation.md#visual_cpp): 2026 Update 2 [mark noimpl]


## 関連項目
- [`DBL_SNAN`](dbl_snan.md): `double`型のシグナルNaN
- [`LDBL_SNAN`](ldbl_snan.md): `long double`型のシグナルNaN
- [`NAN`](/reference/cmath/nan.md): `float`型のquiet NaN


## 参照
- [P3348R4 C++26 should refer to C23 not C17](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3348r4.html)
- C++26がC23を参照するようになり、このマクロが`<cfloat>`に追加された
Loading
Loading