Bug 2343 – unified function call syntax

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D1 (retired)
Platform
x86
OS
All
Creation time
2008-09-07T08:38:00Z
Last change time
2014-03-01T00:35:56Z
Keywords
rejects-valid
Assigned to
nobody
Creator
benoit

Comments

Comment #0 by benoit — 2008-09-07T08:38:31Z
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.
Comment #1 by bruno.do.medeiros+deebugz — 2008-09-22T07:47:30Z
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..
Comment #2 by clugdbug — 2012-11-19T07:20:24Z
..And indeed UFCS was implemented!