On 2013-12-11 16:28, bearophile wrote:
Simen Kjærås:

http://wiki.dlang.org/DIP52

However, given that this code compiles and works perfectly:

void baz() {
   import std.typecons;
   Tuple!(int, int) a;
   Tuple!(int, "x", int, "y") b;
   a = b; // Implicit conversion to less specialized type.
   b = a; // Implicit conversion to more specialized type.

I think "b = a;" is an accepts-invalid bug.

I partly agree. I want this to compile:

Tuple!(int, "x", int, "y") bar() {
    import std.typecons;
    Tuple!(int, int) a;
    return a;
}

And doing that without letting "b = a;" above compile seems counterintuitive and an unnecessary complexity.


void foo(TaggedUnion!(float, string, int, MyStruct) arg) {}

Do you mean Algebraic?

Since a rewrite of Algebraic, supporting more features than the current version, is in progress, I chose to use a simple tagged union (which is what the current Algebraic is, I suppose).


Regarding the topic of implicit conversions, I propose to warn and then
deprecate and then disallow the following two implicit casts, that only
cause confusion, and are of no real utility:

enum Foo { A, B }
void main() {
     enum int i1 = 1;
     bool b1 = i1; // deprecate
     int i2 = Foo.A; // deprecate
}

I agree, but feel that this is orthogonal to the DIP.

--
  Simen

Reply via email to