Conceptually the following does not breach privacy in my opinion. But it is forbidden.
struct A
{
int a;
int b;
int c;
};
struct B
{
int a;
int b;
private:
int c;
};
int main (int argc, char * argv[])
{
auto a = A{1,2,3}; //ok
auto b = A{1,2}; //ok
auto c = B{1,2,3}; //error
auto d = B{1,2}; //error
return 0;
}
Adding a manual constructor would allow brace initialization for the private members. But the beauty of aggregates and pods is the little amount of coding you need, hence this is annoying.
On the other hand, this is a privacy breach in my opinion but this is allowed by the standard.