Bill Baxter пишет: > 2008/12/27 Weed <resume...@mail.ru>: >> Simen Kjaeraas пишет: >>> On Fri, 26 Dec 2008 20:15:30 +0100, Weed <resume...@mail.ru> wrote: >>> >>>> Can I at compile time check whether there is a facility method >>>> (toString(), for example)? >>>> >>>> Today I wrote: >>>> >>>> static if ( __traits(isArithmetic, Element) ) { >>>> ret ~= toString(this[i,j]) ~ "\t"; >>>> } else { >>>> ret ~= this[i,j].toString ~ "\t"; >>>> } >>>> >>>> It works but it is wrong >>> I believe this works: >>> >>> static if (is(typeof(this[i,j].toString))) { >>> ret ~= this[i,j].toString; >>> } else { >>> ret ~= toString(this[i,j]); >>> } >>> >> No, this cause error: >> >> toString () does not match parameter types (float) >> >> ( condition is always resolved to else {...} ) > > That's because float's don't have a toString method. So it should be > picking the else{} case. > > If you try it with something where this[i,j] returns an Object or > struct with a toString, then it should pick the 'if' branch.
There was confusion between this.toString () and std.stdio.toString () Fixed, thanks!