www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Problem with opBinary

reply realhet <real_het hotmail.com> writes:
Hi,

Just a little weird thing I noticed and don't know why it is:

I have a FilePath struct and I wanted to make it work with the 
"~" operator and an additional string.

So I've created a global funct:

   FilePath opBinary(string op:"~")(FilePath p1, string p2){
     return FilePath(p1, p2);
   }

The problem is that this funct is only callable with the 
following code:

   auto vlcPath = programFilesPath.opBinary!"~"(`VideoLAN\VLC`);

And it is not callable using the ~ operator directly. It says 
unable to call with types  FilePath and string

When I rewrite the opBinary funct as a member of the FilePath 
struct, everything is working fine. The problem is only happening 
when opBinary is a global funct. (I'm using LDC Win64)

Is it a bug or is there an explanation to this?
Nov 14 2018
parent reply Jonathan M Davis <newsgroup.d jmdavisprog.com> writes:
On Wednesday, November 14, 2018 2:54:27 AM MST realhet via Digitalmars-d-
learn wrote:
 Hi,

 Just a little weird thing I noticed and don't know why it is:

 I have a FilePath struct and I wanted to make it work with the
 "~" operator and an additional string.

 So I've created a global funct:

    FilePath opBinary(string op:"~")(FilePath p1, string p2){
      return FilePath(p1, p2);
    }

 The problem is that this funct is only callable with the
 following code:

    auto vlcPath = programFilesPath.opBinary!"~"(`VideoLAN\VLC`);

 And it is not callable using the ~ operator directly. It says
 unable to call with types  FilePath and string

 When I rewrite the opBinary funct as a member of the FilePath
 struct, everything is working fine. The problem is only happening
 when opBinary is a global funct. (I'm using LDC Win64)

 Is it a bug or is there an explanation to this?
In D, all overloaded operators must be member functions. - Jonathan M Davis
Nov 14 2018
parent realhet <real_het hotmail.com> writes:
Thanks, this make it clear.
(This also explains the existence of opBinaryRight)
Nov 14 2018