имеется следующий код:
#include <iostream>
using namespace std;
namespace A {
template <typename T>
void foo(T*)
{
cout << "void foo(T*)\n";
}
};
class B {
public:
friend void A::foo<>(B*);
private:
int b_;
};
int main()
{
B b;
foo(&b);
return 0;
}
который нормально компилируется, но почему-то не работает так, как ожидается. Точнее, функция foo фактически не вызывается.
Вопрос: если это пример Argument Dependent Name Lookup, то почему функция не вызывается, если это не ADNL, то почему нету ошибки компиляции?