D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 2343 - unified function call syntax
Summary: unified function call syntax
Status: RESOLVED FIXED
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D1 (retired)
Hardware: x86 All
: P2 normal
Assignee: No Owner
URL:
Keywords: rejects-valid
Depends on:
Blocks:
 
Reported: 2008-09-07 08:38 UTC by Frank Benoit
Modified: 2014-03-01 00:35 UTC (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description Frank Benoit 2008-09-07 08:38:31 UTC
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 Bruno Medeiros 2008-09-22 07:47:30 UTC
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 Don 2012-11-19 07:20:24 UTC
..And indeed UFCS was implemented!