The ambiguity arising from the similarity between a function-style cast and
a declaration mentioned in
[stmt.ambig] can also occur in the context of a declaration
. In that context, the choice is between
an object declaration
with a function-style cast as the initializer and
a declaration involving a function declarator
with a redundant set of parentheses around a parameter name
. Just as for the ambiguities mentioned in
[stmt.ambig],
the resolution is to consider any construct,
such as the potential parameter declaration,
that could possibly be a declaration
to be a declaration
. [
Note 1:
A declaration can be explicitly disambiguated by adding parentheses
around the argument
. The ambiguity can be avoided by use of copy-initialization or
list-initialization syntax, or by use of a non-function-style cast
. —
end note]
[
Example 1:
struct S {
S(int);
};
typedef struct BB { int C[2]; } *B, C;
void foo(double a) {
S v(int(a));
S w(int());
S x((int(a)));
S y((int)a);
S z = int(a);
S a(B()->C);
S b(auto()->C);
}
—
end example]