http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56037



             Bug #: 56037

           Summary: Spurious syntax error triggered before ambiguity

                    resolution of type-id

    Classification: Unclassified

           Product: gcc

           Version: 4.7.2

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: c++

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: ricil...@gmail.com





A spurious syntax error is produced by the following:



  static const int zero = 0;

  std::cout << (std::pair<int, int>(int(zero), int(zero))) << std::endl;



In contrast, 



  static const int zero = 0;

  static const int zero_alias = 0;

  std::cout << (std::pair<int, int>(int(zero), int(zero_alias))) << std::endl;



compiles correctly (assuming that there is an appropriate overload for

operator<<).



Section 8.2[2] states that 



The ambiguity arising from the similarity between a function-style cast and a  

type-id can occur in different contexts. The ambiguity appears as a choice

between a function-style cast expression and a declaration of a type. The

resolution is that any construct that could possibly be a type-id in its

syntactic context shall be considered a type-id.



In this case, 8.2[2] should not apply, since the syntactic context of the

parenthesized expression does not permit the production:



  cast-expression :: ( type-id ) cast-expression



However, in the first code excerpt, where the parenthesized expression would

not be a valid type-id (because of the redefinition of the parameter name), the

syntax error is apparently being triggered before the ambiguity resolution

decides that type-id is not possible. In the second code excerpt, the

parenthesize expression could contain a valid type-id, but ambiguity resolution

rejects that possibility.



---



Bug report generated as a result of

http://stackoverflow.com/questions/14403946/adding-parenthesis-to-a-constructor-call-causes-duplicate-parameter-error-in-xlc/14404900#14404900

Reply via email to