I am trying to figure out a crispier syntax for templatized open methods. I am stumbling on this (see comments):

// dmd -run conflict.d
int foo();

struct Foo {
  static int foo(int x) { return x; }
}

alias foo = Foo.foo; // overload with an alias - OK

int bar(T)();
int bar(T)(T x) { return x; } // overloaded function templates - OK

int baz(T)();

struct Baz {
  static int baz(T)(T x) { return x; }
}

//alias baz = Baz.baz; // Error: alias conflict.baz conflicts with template conflict.baz(T)() at conflict.d(11)

void main()
{
  import std.stdio;
  writeln(foo(42)); // 42
  writeln(bar(666)); // 666
}

Why?

Reply via email to