On 3/6/20 9:14 AM, Adam D. Ruppe wrote:
On Friday, 6 March 2020 at 14:05:55 UTC, Steven Schveighoffer wrote:
Adam's way doesn't work either, because the call doesn't use the alias, but just instantiates opDispatch with the new name!'

oh yikes, how did I not notice that?!

so yeah just kinda screwed. I'd probably suggest at tis point having the opDispatch be a trivial implementation that just forwards to another named method.

struct A {
   template opDispatch(string name) {
      auto opDispatch(T, Args...)(Args args) {
            return other_name!(name, T, Args)(args);
      }
   }

Do this instead, I think this will work and avoids an extra call (and having to do the argument plumbing that inevitably comes with this kind of wrapping):

template opDispatch(string name) {
   alias opdispatch(T) = other_name!(name, T);
}

template other_name(string name, T) {
   auto other_name(Args...)(Args args) {
      // real implementation
   }
}

-Steve

Reply via email to