Koenig lookup in D?

Peter Alexander peter.alexander.au at gmail.com
Tue Aug 27 01:37:22 PDT 2013


On Tuesday, 27 August 2013 at 07:54:06 UTC, Walter Bright wrote:
> On 8/27/2013 12:45 AM, monarch_dodra wrote:
>> The root reason for this mechanism, is that it allows writing
>> templated functions that can operate on objects from any
>> namespace.
>
> I believe the root reason was so that operator overloads would 
> work when the rvalue was the class type. (In C++ you have to 
> write non-member functions to handle those cases.)
>
> D solves that via other mechanisms, so Koenig lookup is not 
> necessary.

The only reason slices work as ranges in D is because std.range 
imports std.array. As in the example in the original post, for 
slices, front, popFront, and empty are free functions, so 
std.range cannot find them without importing std.array directly.

As a result, slices are the ONLY ranges that can do this, which 
is a bit hacky.

I'm not sure what the resolution of this is. Anti-hijacking is 
import, and ADL can get quite messy, but ADL is also important. 
We may just have to ensure that all template interfaces are 
satisfied via member functions.



More information about the Digitalmars-d mailing list