C++を使っていて、C のコードブロックを書きたいときに __cplusplus を使用して対処することがあります。 このとき、 __cplusplus が定義されていたら、現在は C++ のコンテキストでコンパイルしている、と判断していたわけですが、この __cplusplus は実はC++のバージョン値を持っていたということを今更知りました。
きっかけは、Microsoft のブログでした。
MSVC now correctly reports __cplusplus - C++ Team Blog
The MSVC compiler’s definition of the __cplusplus predefined macro leaps ahead 20 years in Visual Studio 2017 version 15.7 Preview 3. This macro has stubbornly ...
Visual Studio 2017 15.7 で既にこのように使えているようです。ちょっとコンパイラのスイッチとの組み合わせ部分が厄介な点でしょうか。(以下の設定情報は上記ブログより引用しています)