Is there a way to avoid the following combinatorial explosion of overloaded functions when overloading for lvalue and rvalue arguments? The following may be a bad example because int is cheap to copy. So assume a large datatype instead of int.

import std.stdio;

void foo(in ref int a, in ref int b)
{
    writeln("r, r");
}

void foo(in ref int a, in int b)
{
    writeln("r, i");
}

void foo(in int a, in ref int b)
{
    writeln("i, r");
}

void foo(in int a, in int b)
{
    writeln("i, i");
}

void main()
{
    int a, b;
    foo(a, b);
    foo(a, 0);
    foo(0, a);
    foo(0, 0);
}

  • Overloading for lvalue and rval... Balagopal Komarath via Digitalmars-d-learn

Reply via email to