Dependent Names With A Little Encouragement

Hey, fuckface! Think fast! template<typename F> void invokeFoo(F& f) { f.foo(); } struct Fooable { void foo() {} }; int main() { Fooable c; invokeFoo(c); } This is normal C++ code—nothing particularly nefarious afoot. invokeFoo is a function that takes a hopefully-fooable argument and, well, calls its foo method. That’s fine and well, but what if we further assume that F::foo is a member template?…