On Tuesday, 11 September 2012 at 21:31:17 UTC, Namespace wrote:
On Tuesday, 11 September 2012 at 21:13:02 UTC, bearophile wrote:
Namespace:

I have this code, but it works not as expected:
http://dpaste.dzfl.pl/6ce5b4dd

I suggest to file a bug:


auto foo(bool b) {
   final switch (b) {
       case true:
           return 10;
       case false:
           return 20.0;
   }
}
void main() {
   import std.stdio: writeln;
   writeln(foo(true));
   writeln(foo(false));
}


The acceptable results are a compile-time error for type mismatch, or a conversion of both literals to double. Probably the second is better. But a silent bit-level cast is not acceptable.

Bye,
bearophile

Sure that is the first i will do tomorrow.
But so far no suggestions?

Just this one. You can use an anonymous union in your Num struct, so you can write "obj.ivalue" rather than obj._num.ivalue":

struct Num {
private:

  final enum Type {
    None,
    Float,
    Int
  }

  union {
    float fvalue;
    int ivalue;
  }

  Type _type;

  ....

Graham

Reply via email to