On 09/09/2010 06:26 PM, Steven Schveighoffer wrote:


Yes, I forgot that you are allowed to overload via ref. That would make
sense for virtual functions.

That forces us to provide multiple overloads, each matching one of the possible combinations of rvalue/lvalue arguments. A function with n struct parameters would require 2^n overloads. The only way to avoid the mess is to implement a single function taking all struct arguments by value or use templates, which is unacceptable in the general case.

There is also an unspecified part related to default arguments. For example, this compiles:

struct S
{
}

S bar()
{
    return S();
}

void foo(ref const S s = bar())
{
}

Is it safe to rely on this feature?



Reply via email to