cannot use local f as parameter to non-global template
aliak
something at something.com
Sat Dec 8 09:57:29 UTC 2018
Hi, I'm wondering about why this happens in a certain situation
and not another. I have the following code:
struct Holder(alias fun) {
alias T = typeof(fun());
T get() { return fun(); }
alias get this;
}
template match(handlers...) {
auto match(T)(T holder) {
return handlers[0](holder);
}
}
void main() {
int f() { return i7 }
auto value = Holder!f().match!(
(int a) => f()
);
}
This compiles fine. However, if I change the match template to:
template match(handlers...) {
auto match(alias f)(Holder!f holder) {
return handlers[0](holder);
}
}
Notice the template parameter of the eponymous match is an alias
now, and the function parameter is typed as a Holder.
The error you get is basically because of bug 5710 [0] I guess.
But I'm confused as to why the same thing doesn't then happen
when using match(T) as opposed to match(alias f)?
I can work around it by have a template constraint on match of
course. But still curious why one version works and the other
not, they both have to access the same frame+context data at the
end of the day.
[0]: https://issues.dlang.org/show_bug.cgi?id=5710
More information about the Digitalmars-d-learn
mailing list