Существует неоднозначность в грамматике языка, касающаясяоператора-выражения и описания, а именно, оператор-выражение,содержащий как самое левое подвыражение явное преобразование типа,заданное в функциональном стиле ($$R.5.2.3), может быть не отличим отописания, в котором первый описатель начинается со (. В таких случаяхоператор считается описанием. Для разрешения неоднозначности следует исследовать весь оператор,чтобы определить является он оператором-выражением или описанием.Так устраняется неоднозначность во многих случаях. Например, пустьT - имя-простого-типа ($$R.7.1.6), тогда имеем T(a)->m = 7; // оператор-выражение T(a)++; // оператор-выражение T(a,5)<<c; // оператор-выражение T(*e)(int); // описание T(f)[]; // описание T(g) = {1, 2 }; // описание T(*d)(double(3)); // описание Остальные случаи представляют описания. Например, T(a); // описание T(*b)(); // описание T(c)=7; // описание T(d),e,f=3; // описание T(g)(h,2); // описание Неоднозначность здесь чисто синтаксическая, т.е. на ееразрешение не влияет тот факт, является ли имя именем-типа или нет. Есть другой вид коллизии между оператором-выражением и описанием,который разрешается требованием, чтобы описание функции в блоке($$R.6.3) сопровождалось именем-типа, например: void g() { int f(); // описание int a; // описание f(); // оператор-выражение a; // оператор-выражение }