If a global function exists like this: bool equals(char[] a, char[] b){ return a == b; } It is possible to use it like this: char[] str1 = ...; char[] str2 = ...; str1.equals( str2 ); // compiles OK But if this is used from within a class that also has a method with the name "equals" the syntax above does not work any more: class A { bool equals( Object o ){ ... } void foo (){ bool res = str1.equals(str2); // compile error // equals(Object) does not // match parameter types (char[],char[]) bool res2 = .equals(str1,str2); // compile OK } } The compile error should not happen, because in case of str1.equals(.. only the methods of type(str1) and global functions should be looked at.
To fix this, it would be necessary to make the "external member functions" a proper feature, instead of the simple hack/accidental-feature it is now. Among other things, it should work for other types and not just arrays, have a way to prevent normal external functions to *not* be considered as member functions, etc..
..And indeed UFCS was implemented!