このページはC++14に採用された言語機能の変更を解説しています。
のちのC++規格でさらに変更される場合があるため関連項目を参照してください。
概要
C++11で導入されたメンバ初期化子は集成体の初期化と組み合わせて使用することができない問題があった。
C++11で不適格となる以下のコードは、C++14では適格となる:
#include <string>
struct Univ {
std::string name;
int rank;
std::string city = "unknown";
};
int main()
{
Univ u = {"Columbia", 10}; // OK: city=="unknown"
Univ v = {"Columbia", 10, "New York"}; // OK
}
仕様
- 集成体の定義として「非静的メンバ変数の初期化をもたない」ことが条件になっていたが、それを削除