The following doesn't work, is it a known issue or should I report it. class C { void opDispatch (string str, T) (T t) {} } class D { void opDispatch (string str) (int t) {} } C c = new C; c.foo = 3; // doesn't work c.foo(3); // works D d = new D; d.foo = 3; // works