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