If I understand your question correctly, you're asking why you can't do this:

Code:
struct A
{
    int i = 0;
};
?

If that's the question, then the answer is: because it isn't clear when that assignment should take place written in that way. Any code outside of a function (global initializations etc) must be executed before main(), but here there is not yet any object to initialize. So when would the assignment take place? Presumably, upon construction of an A object, this would specify the initial values of its fields.

That *would* be a perfectly reasonable interpretation....but that just isn't the way they chose to specify it. Instead, you have to do
Code:
struct A
{
    int i;
    A(): i(0) {}
};