Esse código com inicialização agregada é um programa C++ válido?
#include <iostream>
#include <numeric>
struct Sheet {
const int c[2]{};
const int sum = std::accumulate(std::begin(c), std::end(c), 0);
};
int main() {
Sheet sheet0;
Sheet sheet1{{10}};
Sheet sheet2{{10, 20}};
std::cout << sheet0.sum << "\n";
std::cout << sheet1.sum << "\n";
std::cout << sheet2.sum << "\n";
}
// Outputs:
// 0
// 10
// 30
Esta é uma estrutura com comportamento semelhante ao de uma planilha do Excel: um usuário inicializa células com alguns valores; se o usuário não inicializar, sum
ele obtém a soma computada dos valores das células.
Não tenho certeza se a inicialização de membros em linha, e não a inicialização zero, acontece em membros ignorados na inicialização agregada.
Eu esperava que a declaração
Sheet sheet2{{10, 20}};
seria o mesmo que
Sheet sheet2{{10, 20}, {}};
e saída 0, mas minhas execuções de programa mostraram que eles resultam em saídas diferentes 30 e 0.