According to the excerpt when you write foo f { }; in scenario A you get aggregate-initialization. An it would be great. But in reality in c++11 (#3337 draft, closest to standard) you have different initialization order:

List-initialization of an object or reference of type T is defined as follows:

If the initializer list has no elements and T is a class type with a default constructor, the object is value-initialized.

Otherwise, if T is an aggregate, aggregate initialization is performed (8.5.1)

So foo f { }; in scenario A should result in value-initialization, that is, the DELETED default constructor will be called and the code should fail to be compiled.