Consider
#include <iostream>
template <typename T>
void foo (T*) { std::cout << "foo (T*) called.\n"; }
template <typename T>
void foo (typename T::Node*) { std::cout << "foo (typename T::Node*) called.\n"; }
struct A {
struct Node { };
};
int main() {
A* a = new A;
foo(a);
A::Node* node = new A::Node;
foo(node);
}
Output:
foo (T*) called.
foo (T*) called.
How do I fix the code so that the second output gives foo (typename T::Node*) called.
?