www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Static struct assign

reply bearophile <bearophileHUGS lycos.com> writes:
While trying to create a safe int, I have found a problem, this is reduced code:

struct Foo {
    int x;
    static Foo opAssign(int value) { return Foo(value); }
}
void main() {
    Foo y = 0;
}


The compiler prints:
test.d(6): Error: cannot implicitly convert expression (0) of type int to Foo

While this generates no error:
Foo y; y = 0; is OK.

Do you know if there is a way to do that?

Bye and thank you,
bearophile
Mar 11 2010
next sibling parent reply Ellery Newcomer <ellery-newcomer utulsa.edu> writes:
On 03/11/2010 11:22 AM, bearophile wrote:
 While trying to create a safe int, I have found a problem, this is reduced
code:

 struct Foo {
      int x;
      static Foo opAssign(int value) { return Foo(value); }
 }
 void main() {
      Foo y = 0;
 }


 The compiler prints:
 test.d(6): Error: cannot implicitly convert expression (0) of type int to Foo

 While this generates no error:
 Foo y; y = 0; is OK.

 Do you know if there is a way to do that?

 Bye and thank you,
 bearophile
define opCall in Foo
Mar 11 2010
parent bearophile <bearophileHUGS lycos.com> writes:
Ellery Newcomer:
 define opCall in Foo
Thank you :-) I need to practice more with operator overload. Bye, bearophile
Mar 11 2010
prev sibling parent =?ISO-8859-1?Q?Pelle_M=E5nsson?= <pelle.mansson gmail.com> writes:
On 03/11/2010 06:22 PM, bearophile wrote:
 While trying to create a safe int, I have found a problem, this is reduced
code:

 struct Foo {
      int x;
      static Foo opAssign(int value) { return Foo(value); }
 }
 void main() {
      Foo y = 0;
 }


 The compiler prints:
 test.d(6): Error: cannot implicitly convert expression (0) of type int to Foo

 While this generates no error:
 Foo y; y = 0; is OK.

 Do you know if there is a way to do that?

 Bye and thank you,
 bearophile
I think you want a constructor. struct Foo { int x; static Foo opAssign(int value) { return Foo(value); } this(int i) {x = i;} }
Mar 11 2010