On Friday, March 09, 2012 21:32:35 Caligo wrote: > struct B { } > struct C { } > struct D { } > > struct A { > > ref A foo(B item) { > /* do something special. */ > return this; > } > > ref A foo(T)(T item) if(is(T == C) || is(T == D)) { > /* nothing special, do the same for C and D. */ > return this; > } > } > > Is this unreasonable? iirc, C++ supports this, but not D. What's the > reason? Bug? > > What's a good solution to this? > > 1. a generic `foo()` that uses `static if`s? > > 2. overload `foo()`, even if it means having function bodies that are > exactly same (code duplication).? > > 3. mixin templates? I don't know about this because TDPL says it's > experimental, and I've tried and I get weird errors.
It's a bug: http://d.puremagic.com/issues/show_bug.cgi?id=1528 As a workaround, just add empty parens to the non-templated function to make it a templated function. ref A foo()(B item) {} - Jonathan M Davis