C++1z 非推奨だったbool型に対するインクリメント演算子を削除

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の以下の階層の下に解説ページを用意する予定です。