[Issue 9410] Wrong selection for function overload

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sun Jan 27 05:35:13 PST 2013


http://d.puremagic.com/issues/show_bug.cgi?id=9410


Maxim Fomin <maxim at maxim-fomin.ru> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |diagnostic, rejects-valid
                 CC|                            |maxim at maxim-fomin.ru


--- Comment #1 from Maxim Fomin <maxim at maxim-fomin.ru> 2013-01-27 05:35:11 PST ---
Reduced (Error: S() is not an lvalue)

import std.stdio;

struct S {}

void foo(float f, ref const S s)
{
    writeln("const");
}

void foo(float f, const S s)
{
    writeln("ref const");
}

void main()
{
    foo(1, S()); // 1f fixes code and calls ref const version
}


If overloaded functions have several parameters, one of which is
const-qualified used-defined type and functions differer only in refness of
that parameter, supplying implicitly convertible arguments (like int to float)
to other parameters breaks compiler. 

Passing 1f results in calling ref const version which contradicts to recent
revertion of passing struct literals by ref (however that was without const).
It is unclear what should happen in presence of const.

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


More information about the Digitalmars-d-bugs mailing list