www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 17921] New: allow to use `alias function this` to be used for


          Issue ID: 17921
           Summary: allow to use `alias function this` to be used for
                    implicit conversions
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: code dawg.eu

cat > enh.d << CODE
struct IPv4Addr
  alias IPAddr this; // alias type constructor for implicit conversion

// either IPv4 or IPv6
struct IPAddr
  this(IPv4Addr) {}

void func(IPAddr)

dmd -c -unittest enh.d
enh.d(3): Error: IPAddr is not a member of IPv4Addr

At the moment alias this for implicit conversions needs a dummy member method.
When you already have `IPAddr(IPv4Addr.init)` it's somewhat annoying to add
`IPv4Addr.init.toIPAddr` to the public API, only to support implicit
conversions. Now there are 2 ways to do the same thing, sth. that's usually to
be avoided in API design.

Alias-thising a free function or type would be resolved like `var.func` calls,
and according to the current alias this rules.

Obviously this should be coordinated with the multiple alias this work.

Oct 20 2017