[sv-bc] Re: [sv-ec] Conflicting class_new rule

From: David Jones <djones_at_.....>
Date: Thu Mar 26 2009 - 08:10:17 PDT
The issue here is user-defined new vs. copy constructor.

SomeClass sc1, sc2;

sc2 = new sc1; // This is copy constructor: sc2 becomes a shallow copy of sc1.
sc2 = new (17); // This is a call to a user-defined function new()
sc2 = new (sc1); // This is also a call to a user-defined function
new() - that takes SomeClass as an argument!

The difference between the copy constructor and the user-defined new
call is the parentheses: no parentheses are used for the copy
constructor. An expression inside parentheses is always interpreted as
a call to a user-defined constructor.

I agree that this ought to be clarified.

On Thu, Mar 26, 2009 at 9:19 AM, Surya Pratik Saha
<spsaha@cal.interrasystems.com> wrote:
> Hi,
> Class new rule is defined in the LRM as:
> class_new18 ::= new [ ( list_of_arguments ) | expression ]
> And here is the definition of sub-rule:
> list_of_arguments ::=
> [ expression ] { , [ expression ] } { , . identifier ( [ expression ] ) }
> | . identifier ( [ expression ] ) { , . identifier ( [ expression ] ) }
>
> expression ::=
> primary
> [...]
>
> primary ::=
> primary_literal
> [...]
> | ( mintypmax_expression )
>
> mintypmax_expression ::=
> expression
> | expression : expression : expression
>
> So a new expression like 'new (1)' can be reached both by "new '('
> list_of_arguments')'" rule and "new expression" rule. Which is conflicting.
> And also semantically 'expression' after 'new' just pointing to a class
> object. So I think a subset of expression is valid here. Is there any mantis
> regarding that?
>
> --
> Regards
> Surya
>
> --
> This message has been scanned for viruses and
> dangerous content by MailScanner, and is
> believed to be clean. --
>
> This email was Anti Virus checked by Astaro Security Gateway.
> http://www.astaro.com

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Thu Mar 26 08:12:36 2009

This archive was generated by hypermail 2.1.8 : Thu Mar 26 2009 - 08:13:26 PDT