On 2011-10-17 12:26:17 +0000, "Steven Schveighoffer" <schvei...@yahoo.com> said:

On Fri, 14 Oct 2011 20:21:59 -0400, Michel Fortin <michel.for...@michelf.com> wrote:

Perhaps you can add this to the struct:

        void this(U)(in S!U other) if (__traits(compiles, this.x = other.x))
        {
                this.x = other.x;
        }

If that works, maybe a similar approach could be used to solve the problem with inout: if you can construct the requested type from the provided one it get converted automatically at the call site.


This looks promising. However, I seem to recall D specifically disallowing implicit conversion using a constructor...

Is this going to fly with Walter?

For some reason I couldn't make it work with the constraint, but this works fine with the current compiler:

        struct S(T)
        {
                this(U)(in S!U other)
                {
                        this.x = other.x;
                }

                T * x;
        }

        void main()
        {
                S!(int) ptr;
                S!(const(int)) cptr = ptr;
        }

Whether it's intended or not I don't know. Ask Walter.

--
Michel Fortin
michel.for...@michelf.com
http://michelf.com/

Reply via email to