bool
型に対してインクリメントすると固定でtrue
になる仕様がありましたが、この仕様はC++98時点で非推奨になっていました。C++1zではこの機能が削除されます。
以下のようなコードは、C++1zではコンパイルが通らなくなりますので注意してください。
#include <cassert> int main() { bool b1 = false; bool b2 = true; // C++98から非推奨だがC++14まで合法、 // C++1zではコンパイルエラー ++b1; b2++; assert(b1 == true); assert(b2 == true); }
ちなみに、bool
型に対するデクリメントは元々できません。
仕様としては、「算術型 (arithmetic type) に対してインクリメントできる」と書かれていたものが「(CV修飾された) bool
型以外の算術型に対してインクリメントできる」に変わります。
参照
お断り
この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。