Implicit Function Template Instantiation (IFTI) Question
jmh530
john.michael.hall at gmail.com
Mon Apr 27 17:19:35 UTC 2020
When using a template with multiple functions within it, is it
possible to access the underlying functions directly? Not sure I
am missing anything, but what works when the functions are named
differently from the headline template doesn't work when the
functions are named the same.
import std.stdio: writeln;
import std.traits: isFunction;
template foo(T) {
void foo(U)(U x) {
writeln("here0");
}
void foo(U, V)(U x, V y) {
writeln("there0");
}
}
template bar(T) {
void baz(U)(U x) {
writeln("here1");
}
void baz(U, V)(U x, V y) {
writeln("there1");
}
}
void foobar(T)(T x) {}
void main() {
foo!int.foo!(float, double)(1f, 2.0); //Error: template
foo(U)(U x) does not have property foo
writeln(isFunction!(foo!int)); //prints false, as expected
b/c not smart enough to look through
writeln(isFunction!(foo!int.foo!float)); //Error: template
identifier foo is not a member of template
onlineapp.foo!int.foo(U)(U x)
writeln(isFunction!(foo!int.foo!(float, double))); //ditto
bar!int.baz!(float, double)(1f, 2.0); //prints there1
writeln(isFunction!(bar!int.baz!(float, double))); //prints
true
writeln(isFunction!(foobar!int)); //prints true
}
More information about the Digitalmars-d-learn
mailing list