D's greatest mistakes

Steven Schveighoffer schveiguy at yahoo.com
Mon Nov 29 11:35:34 PST 2010


On Mon, 29 Nov 2010 11:52:31 -0500, dsimcha <dsimcha at yahoo.com> wrote:

> == Quote from Andrei Alexandrescu (SeeWebsiteForEmail at erdani.org)'s  
> article
>
>> Ultimately I believe we need to make Rebindable palatable. That would
>> have the nice side effect of enabling other proxy types.
>> Andrei
>
> I've asked before and I'll ask again, what's still wrong with  
> Rebindable?  A bunch
> of alias this issues got fixed in 2.050, and I fixed a bunch of misc.  
> convenience
> issues a few releases ago.  I fail to see the problem with it anymore.

Every few months or so, someone finds a problem with it.  It seems that  
it's good enough in theory, but miserably fails in practice when someone  
tries to use it.  I admit I haven't looked at it in a while, but there are  
implicit casting problems that cannot be solved without compiler help.  I  
just think Rebindable will get more and more convoluted until someone  
finally admits that this is better served as a builtin feature.

One of those issues:

import std.typecons;

class C {}

void foo(Rebindable!(const C) c)
{
}

void bar(const(C) c)
{
}

void main()
{
     const C x;
     Rebindable!(const C) y = x;
     foo(x); // line 17
     bar(y); // line 18
}

produces:

testrebindable.d(17): Error: function testrebindable.foo  
(Rebindable!(const(C)) c) is not callable using argument types (const(C))
testrebindable.d(17): Error: cannot implicitly convert expression (x) of  
type const(C) to Rebindable!(const(C))
testrebindable.d(18): Error: function testrebindable.bar (const(C) c) is  
not callable using argument types (Rebindable!(const(C)))
testrebindable.d(18): Error: cannot implicitly convert expression (y) of  
type Rebindable!(const(C)) to const(C)

i.e. there is no way to produce a function that accepts both a  
Rebindable!(const C) and a const C.

-Steve


More information about the Digitalmars-d mailing list