On 12/30/10 9:22 AM, Michel Fortin wrote:
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.

This is water under the bridge now, but I am definitely interested. What are the reasons for which you find the old design better?

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...

typeof(this) works too.


Andrei

Reply via email to