[Issue 8434] New: [2.060 beta] cannot implicitly convert expression (vs1.opCast()) of type const(Vector2D) to object.Object

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Jul 25 07:29:18 PDT 2012


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

           Summary: [2.060 beta] cannot implicitly convert expression
                    (vs1.opCast()) of type const(Vector2D) to
                    object.Object
           Product: D
           Version: D2
          Platform: x86_64
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: rswhite4 at googlemail.com


--- Comment #0 from rswhite4 at googlemail.com 2012-07-25 07:29:16 PDT ---
[code]
import std.conv : to;

class Vector2D(T) {
public:
    T x, y;

    this(T x, T y) {
        this.x = x;
        this.y = y;
    }

    U opCast(U)() const {
    return new U(x, y);
    }
}

alias Vector2D!(short) Vector2s;
alias Vector2D!(float) Vector2f;

void main() {
    Vector2s vs1 = new Vector2s(42, 23);
    Vector2s vs2 = new Vector2s(42, 23);

    assert(vs1 == vs2);
}
[/code]

prints:

dmd -w -O -property -unittest -debug -of"vec_test_2060" 
"vec_test_2060.d" (im Verzeichnis: D:\D\D_Scripts\Test 4)
vec_test_2060.d(13): Error: no constructor for Object
vec_test_2060.d(24): Error: template instance 
vec_test_2060.Vector2D!(short).Vector2D.opCast!(Object) error 
instantiating
Kompilierung fehlgeschlagen.


And this code:
[code]
import std.conv : to;

class Vector2D(T) {
public:
    T x, y;

    this(T x, T y) {
        this.x = x;
        this.y = y;
    }

    U opCast(U : inout(Vector2D!V), V)() const {
    return new U(x, y);
    }
}

alias Vector2D!(short) Vector2s;
alias Vector2D!(float) Vector2f;

void main() {
    Vector2s vs1 = new Vector2s(42, 23);
    Vector2s vs2 = new Vector2s(42, 23);

    assert(vs1 == vs2);
}
[/code]

prints:

dmd -w -O -property -unittest -debug -of"vec_test_2060" 
"vec_test_2060.d" (im Verzeichnis: D:\D\D_Scripts\Test 4)
vec_test_2060.d(24): Error: template instance opCast!(Object) 
opCast!(Object) does not match template declaration opCast(U : 
inout(Vector2D!(V)),V)
vec_test_2060.d(24): Error: function expected before (), not 
vs1.opCast!(Object) of type void
vec_test_2060.d(24): Error: template instance opCast!(Object) 
opCast!(Object) does not match template declaration opCast(U : 
inout(Vector2D!(V)),V)
vec_test_2060.d(24): Error: function expected before (), not 
vs2.opCast!(Object) of type void
Kompilierung fehlgeschlagen.

If i add to the last code this:

[code]
const(U) opCast(U = typeof(this))() const {
    return this;
}
[/code]

I get:

dmd -w -O -property -unittest -debug -of"vec_test_2060" 
"vec_test_2060.d" (im Verzeichnis: D:\D\D_Scripts\Test 4)
vec_test_2060.d(28): Error: cannot implicitly convert expression 
(vs1.opCast()) of type const(Object) to object.Object
vec_test_2060.d(28): Error: cannot implicitly convert expression 
(vs2.opCast()) of type const(Object) to object.Object
Kompilierung fehlgeschlagen.

With 2.059 both works fine.

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