On 2010-12-30 10:00:05 -0500, "Steven Schveighoffer"
<schvei...@yahoo.com> said:
The thing I find ironic is that with the original operator overloading
scheme, the issue was that for types that define multiple operator
overloads in a similar fashion, forcing you to repeat boilerplate code.
The solution to it was a mixin similar to what you are suggesting.
Except now, even mundane and common operator overloads require verbose
template definitions (possibly with mixins), and it's the uncommon
case that benefits. So really, we haven't made any progress (mixins
are still required, except now they will be more common). I think
this is one area where D has gotten decidedly worse. I mean, just
look at the difference above between defining the opcat operator in D1
and your mixin solution!
I'm with you, I preferred the old design.
As a compromise, can we work on a way to forward covariance, or to have
the compiler reevaluate the template in more derived types?
I stubbled upon this yesterday:
Template This Parameters
TemplateThisParameters are used in member function templates to pick
up the type of the this reference.
import std.stdio;
struct S
{
const void foo(this T)(int i)
{
writeln(typeid(T));
}
}
<http://www.digitalmars.com/d/2.0/template.html>
Looks like you could return the type of this this way...
--
Michel Fortin
michel.for...@michelf.com
http://michelf.com/