[Issue 3235] Function literals must be deduced as "function" or "delegate"

2011-04-28 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=3235



--- Comment #5 from Andrei Alexandrescu  2011-04-28 
13:39:40 PDT ---
BTW this is in TDPL now, with Walter's approval.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 3235] Function literals must be deduced as "function" or "delegate"

2009-08-08 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=3235


Andrei Alexandrescu  changed:

   What|Removed |Added

 Status|RESOLVED|REOPENED
 Resolution|INVALID |




--- Comment #4 from Andrei Alexandrescu   2009-08-08 
11:57:05 PDT ---
(In reply to comment #2)
> This is as designed.
> 
> http://www.digitalmars.com/d/1.0/expression.html#FunctionLiteral
> "If the keywords function or delegate are omitted, it defaults to being a
> delegate."
> 
> Having the type of a function/delegate literal depend on its contents like 
> this
> makes it hard for someone reading the code to tell which it is.  Since 
> function
> pointers and delegates are not generally interchangeable, AISI it's desirable
> to keep their literal notations distinct.

I think type deduction should help here as much as anywhere else. If you do
want a delegate, you can always use the delegate keyword. Plus, all algorithms
in std.algorithm take an efficiency toll when used with literals. 

(Please do not mark this as resolved; I've discussed with Walter before posting
it, and he suggested I do. In general, the spec of D2 is fluid enough to not be
a strong reason for invalidating a bug report. Thanks.)

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 3235] Function literals must be deduced as "function" or "delegate"

2009-08-08 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=3235





--- Comment #3 from Andrei Alexandrescu   2009-08-08 
11:55:19 PDT ---
(In reply to comment #2)
> This is as designed.
> 
> http://www.digitalmars.com/d/1.0/expression.html#FunctionLiteral
> "If the keywords function or delegate are omitted, it defaults to being a
> delegate."
> 
> Having the type of a function/delegate literal depend on its contents like 
> this
> makes it hard for someone reading the code to tell which it is.  Since 
> function
> pointers and delegates are not generally interchangeable, AISI it's desirable
> to keep their literal notations distinct.

I think type deduction should help here as much as anywhere else. If you do
want a delegate, you can always use the delegate keyword. Plus, all algorithms
in std.algorithm take an efficiency toll when used with literals.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 3235] Function literals must be deduced as "function" or "delegate"

2009-08-08 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=3235


Stewart Gordon  changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 CC||s...@iname.com
 Resolution||INVALID




--- Comment #2 from Stewart Gordon   2009-08-08 11:14:14 PDT ---
This is as designed.

http://www.digitalmars.com/d/1.0/expression.html#FunctionLiteral
"If the keywords function or delegate are omitted, it defaults to being a
delegate."

Having the type of a function/delegate literal depend on its contents like this
makes it hard for someone reading the code to tell which it is.  Since function
pointers and delegates are not generally interchangeable, AISI it's desirable
to keep their literal notations distinct.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 3235] Function literals must be deduced as "function" or "delegate"

2009-08-08 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=3235





--- Comment #1 from Andrei Alexandrescu   2009-08-08 
07:17:17 PDT ---
(In reply to comment #0)
> Consider:
> 
> void foo(alias pred)() {
> pragma(msg, pred.stringof);
> }
> 
> unittest {
> foo!((i) { return i < 0; })();
> int z = 1;
> foo!((i) { return i < z; })();
> }
> 
> void main(string[] args)
> {
> }
> 
> This outputs:
> 
> __funcliteral1(__T2)
> __dgliteral3(__T4)
> 
> because the first literal does not have to be a delegate.

I meant that right now this outputs:

__dgliteral1(__T2)
__dgliteral3(__T4)

and it should output:

__funcliteral1(__T2)
__dgliteral3(__T4)

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---