C ++ 11の均一な初期化を使用して、いくつかのコーナーケースに頭を悩ませようとしていますが、これがなぜなのかわかりません:
struct Base
{
int x,y,z;
};
struct Derived : Base
{
};
static_assert (std::is_trivial<Base>::value, "Base must be trivial");
static_assert (std::is_trivial<Derived>::value, "Derived must be trivial");
Base b{1, 2, 3}; // 1) This compiles fine
Derived d{10, 20, 30}; // 2) This fails
2とマークされた行は、との両方で「Derived の初期化に一致するコンストラクターがありません」というメッセージで失敗します。clang 3.1
g++ 4.7
Derived の場合、コンストラクターを呼び出そうとしても実行されない理由がわかりません (1 行目の場合のように、コンストラクターを呼び出す方法がわかりません。おそらく集約初期化ですか?)。
次の推論のどこかが間違っていますか?:
A) 些細なことで、静的に初期化できることが保証されます
B)静的に初期化するには、実行時にコードを実行する必要がないため、コンストラクターの呼び出しは必要ありません
A+B
=>自明であることがわかっている型でコンストラクターを呼び出そうとするのはなぜですか?
私は非常に混乱しています....