Disch is correct. The fact that it compiles does not mean that A b(); isn't a prototype of a function. The reason it compiles is because you never actually call the function. Microsoft Visual C++ 2010 Express compiles it but gives the following warning:
A b(void)': prototyped function not called (was a variable definition intended?)
This is one of the idiosyncrasies of C++ syntax where one would expect that A b(); would call A's default constructor for b, but it does not. To instantiate using the default constructor leave off the parentheses A b;, otherwise the compiler will treat it as a function prototype.