If correctly spelled - A a((A()))
- the compiler creates temporary content directly in the context of the constructor to prevent an extra copy. It was called copy elision . Take a look at this with RVO and NRVO.
From your comment:
A a = A();
it is exactly equivalent
A a((A()));
As @Naveen correctly pointed out, A a(A());
undergoes the most unpleasant analysis, so you need an additional set of paratets for the actual creation of the object.
source share