A non-stationary data element initializer (NSDMI) must use a parenthesis initializer or equal. The initialization form ( expression-list ) not allowed.
As N2756 explains, to allow NSDMI to behave like traditional constructor member initializer lists, the names inside the initializers are scanned throughout the class. Unfortunately, this means that resolving the initializers in parentheses does not allow us to determine if something is an initializer or a function declaration during the analysis of the declaration:
// not real code struct X { int i(x); // initializer static int x; }; struct Y { int i(x); // function typedef int x; };
The document discussed several possible ways to fix this in order to prevent it at all ("everything that can be a declaration is a declaration" or "it is not a type if you do not say it as a type"), but none of them are very attractive , and the potential confusion was considered to outweigh the benefits of allowing this form of initialization.
source share