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);
}