Compilation depends on class methods order

kdmult kdmult at ya.ru
Fri Dec 20 00:23:46 PST 2013


On Friday, 20 December 2013 at 08:03:26 UTC, FreeSlave wrote:
> Make first read function templated too like this:
>
> long read()( ubyte* bytes, long len )

In fact, there are workarouns. But why the order of the 
declarations has an effect on the compilation result.

Namely, if the templated overloaded function goes after the 
non-templated one then the compilation fails.
FAILED:
long read( ubyte* bytes, long len ) { return 0; }
void read(T)( ref T val ) { read(cast(ubyte*)&val, 
cast(long)val.sizeof); }

Otherwise, if the templated overloaded function goes before the 
non-templated one then the compilation is successful.
SUCCEEDED:
void read(T)( ref T val ) { read(cast(ubyte*)&val, 
cast(long)val.sizeof); }
long read( ubyte* bytes, long len ) { return 0; }

Why?


More information about the Digitalmars-d-learn mailing list