On 2013-12-20 08:03, kdmult wrote:
Hi,
Why compilation depends on order of method declarations?
The following test case does not compile.
However, if we change the order of the 'read' methods in class
InputStream below then compilation will not fail.
Is it a bug?
---
module test;
import std.traits : isBasicType;
import std.typetuple : TypeTuple;
class InputStream {
long read( ubyte* bytes, long len )
{
return 0;
}
void read(T)( ref T val ) if (isBasicType!T)
{
read(cast(ubyte*)&val, cast(long)val.sizeof);
}
}
void main()
{
auto input = new InputStream;
foreach (T; TypeTuple!(long, int, short, byte))
{
T v;
input.read(v);
}
}
---
I'm wondering if that's because the first "read" isn't a template
function. You cannot overload a standard function with a template
function, or has that been fixed?
If that's not the problem it's probably the template constraint. I have
had some problems with that and the "solution" I end up using was to add
the same template constraint to the other function but negate the condition.
--
/Jacob Carlborg