このページはC++23に採用された言語機能の変更を解説しています。
のちのC++規格でさらに変更される場合があるため関連項目を参照してください。
概要
C++23では、以下のプリプロセス時条件式が追加される:
#ifdef
に対応する#elif
である、#elifdef
を追加。#if
/#ifdef
/#ifndef
が偽だった場合の、特定の識別子(マクロ名)が定義されているかの判定を記述できる#ifndef
に対応する#elif
である、#elifndef
を追加。#if
/#ifdef
/#ifndef
が偽だった場合の、特定の識別子(マクロ名)が定義されていないかの判定を記述できる
これまでは#elif
において特定のマクロが定義されているかを調べるために#elif defined(macro_name) / #elif !defined(macro_name)
と書く必要があり、#if
に対する#ifdef macro_name / #ifndef macro_name
のような短縮ディレクティブが用意されていなかったが、C++23からは#if
と#elif
の両方でdef/ndef
付きのディレクティブが利用できるようになる。
#define FOO 2
#if FOO == 1
/* */
#elif FOO == 2
/* */
#elifdef BAR
/* */
#elifndef HOGE
/* */
#endif
これらのプリプロセス命令はC23でも追加されるため、C++でも同じく追加する。