On 9/3/16 5:57 PM, Manu via Digitalmars-d wrote:
On 3 September 2016 at 22:42, Andrei Alexandrescu via Digitalmars-d
<digitalmars-d@puremagic.com> wrote:
On 9/3/16 1:51 AM, Manu via Digitalmars-d wrote:

I've
never thought about this problem in C++, or had any problems with ADL.


How do you swap two objects of a generic type that may or may not define its
own swap? -- Andrei

It's not a problem I've ever had.

A problem you didn't know you have. It's a classic C++ conundrum combining theory and practice.

I'm not actually quite sure I
understand your question...

The task is to swap two objects of generic type T. If T's namespace defines an overload of swap with the appropriate signature, use it. Otherwise, fall back to std::swap.

For bonus points: if T defines swap as a _member_ function, use that.

I guess this is sort of like the issue I
was alluding to in my other thread though; there exists a generic
implementation, but some type requires to specialise for itself, which
then needs to trump the otherwise ambiguous conflict with the
catch-all? I think that's an interesting problem, but it's quite easy
to solve with an (ugly) forwarding template; but that forwawrding
template leads right back here, where the worker `doThingImpl()` as
implemented for each type that supports 'doThing' depends on ADL to be
callable from the master `doThing()` function.

Post the code.


Andrei

  • Re: ADL Tobias Müller via Digitalmars-d
    • Re: ADL Andrei Alexandrescu via Digitalmars-d
      • Re: ADL Tobias M via Digitalmars-d
        • Re: ADL Andrei Alexandrescu via Digitalmars-d
          • Re: ADL Tobias M via Digitalmars-d
          • Re: ADL Andrei Alexandrescu via Digitalmars-d
          • Re: ADL Tobias Müller via Digitalmars-d
          • Re: ADL Andrei Alexandrescu via Digitalmars-d
  • Re: ADL Andrei Alexandrescu via Digitalmars-d
    • Re: ADL Manu via Digitalmars-d
    • Re: ADL Andrei Alexandrescu via Digitalmars-d
      • Re: ADL Walter Bright via Digitalmars-d

Reply via email to