[Issue 5747] cannot cast away shared if opCast defined

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sun Nov 3 08:31:47 PST 2013


http://d.puremagic.com/issues/show_bug.cgi?id=5747


monarchdodra at gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |monarchdodra at gmail.com


--- Comment #4 from monarchdodra at gmail.com 2013-11-03 08:31:45 PST ---
Just hit this. IMO, this is a bug: The presence of an opCast should not prevent
"qualification-cast", which don't actually change the type. In particular, the
problem is that *even* trying to hand write it, it's not possible:

//----
import std.traits;

struct S
{
    int* p; //prevent implicit cast
    T opCast(T:bool)() pure const
    {
        return false;
    }
    T opCast(T)() const
    if (is(Unqual!T == S))
    {
        return this; //This fails
        return cast(T) this; //This overflows
    }
}

void main()
{
    immutable(S) s;
    auto b = cast(S)(s); //How to do this?
}
//----

IMO, a cast to the *same* type (but different quals) should always be defined
by the compiler, even if another opCast is defined, unless the use explicitly
overrides *that* opCast.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list