On Monday, 15 April 2019 at 10:45:26 UTC, Alex wrote:
On Monday, 15 April 2019 at 10:15:50 UTC, Anton Fediushin wrote:
On Monday, 15 April 2019 at 10:00:36 UTC, Alex wrote:
[snip]

This would:

´´´

struct Enum {
  private {
    enum internal {
      foo,
      bar
    }
    internal m_enum;
  }
  this(internal i) { m_enum = i; }
  alias m_enum this;
  string toString() {
    if(m_enum == internal.foo)
        return "FOO";
    else
        return "BAR";
  }
}

void fun(Enum e) {}


void main(){
    import std.stdio;
    fun(Enum.init);
    Enum a = Enum.foo;
    Enum b = Enum.bar;
    assert(a == Enum.foo);
    assert(a < b);
    assert(a.toString == "FOO");
    assert(b.toString == "BAR");
    writeln(a); // FOO
    writeln(b); // BAR
}
´´´

Assuming, that automatic generation of "FOO" from foo was not part of your question :-p

This does work unless I want to use it like this:
```
fun(Enum.foo);
---
Error: function fun(Enum e) is not callable using argument types (internal)
cannot pass argument foo of type internal to parameter Enum e
```



Reply via email to