Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
February 24, 2007 [Issue 1006] New: no ambiguity error given if getting function address | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=1006 Summary: no ambiguity error given if getting function address Product: D Version: 1.007 Platform: PC OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla@digitalmars.com ReportedBy: benoit@tionex.de this compiles without error. class C { void fnc(){ } void fnc( int a ){ } static this(){ void* ptr = & fnc; //(1) } } I think (1) should be rejected, because of ambiguity. -- |
February 24, 2007 Re: [Issue 1006] New: no ambiguity error given if getting function address | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | d-bugmail@puremagic.com wrote: > http://d.puremagic.com/issues/show_bug.cgi?id=1006 > > Summary: no ambiguity error given if getting function address > Product: D > Version: 1.007 > Platform: PC > OS/Version: Linux > Status: NEW > Severity: normal > Priority: P2 > Component: DMD > AssignedTo: bugzilla@digitalmars.com > ReportedBy: benoit@tionex.de > > > this compiles without error. > class C { > void fnc(){ > } > void fnc( int a ){ > } > static this(){ > void* ptr = & fnc; //(1) > } > } > I think (1) should be rejected, because of ambiguity. > > This should not be made an error without adding a mechanism to get all of the overloads of a function, for example: C.fnc.tupleof => Tuple!(void function(), void function(int)) -- Kirk McDonald http://kirkmcdonald.blogspot.com Pyd: Connecting D and Python http://pyd.dsource.org |
February 24, 2007 [Issue 1006] no ambiguity error given if getting function address | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=1006 wbaxter@gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |wbaxter@gmail.com ------- Comment #2 from wbaxter@gmail.com 2007-02-24 15:31 ------- It's also very common to use overloads for properties. void prop(int p) { return mProp=p; } int prop() { return mProp; } This is a problem for callback/sigslot mechanisms that very often want to call property-like functions. caller ~= (int x){ obj.prop=x; } vs caller ~= &obj.prop; The former introduces an extra layer of indirection, is slightly wordy, and is potentially problematic if 'obj' happens to go out of scope. The latter is currently ambiguous. Apparently a cast can be used currently: caller ~= cast(void function(int))&obj.prop; but it is just too ugly. And it's also semantically incorrect and unsafe. I'm not casting I'm trying to disambiguate. And it's unsafe because the cast will succeed even if obj.prop is a float* or anything else. This is apparently an old proposal (according to Chris N-S) to disambiguate without requiring a cast: caller ~= &obj.prop(int); That would be great if that could be done without making the grammar ambiguous. For generic programming purposes, this should also work: alias Tuple!(int) ArgTup; caller ~= &obj.prop(ArgTup); -- |
February 24, 2007 [Issue 1006] no ambiguity error given if getting function address | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=1006 ------- Comment #3 from wbaxter@gmail.com 2007-02-24 15:34 ------- I should add that the problem I spoke of exists only when 'caller.opCatAssign' is a template that accepts multiple function/delegate signatures. If its opCatAssign takes a particular signature then there's no problem. -- |
February 25, 2007 [Issue 1006] no ambiguity error given if getting function address | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=1006 smjg@iname.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |DUPLICATE ------- Comment #4 from smjg@iname.com 2007-02-25 10:32 ------- *** This bug has been marked as a duplicate of 52 *** -- |
Copyright © 1999-2021 by the D Language Foundation