На cppreference.com приведен следующий код в качестве примера, поясняющего разрешение зависимых имен:
#include <iostream>
void g(double) { std::cout << "g(double)\n"; }
template<class T>
struct S {
void f() const {
g(1); // "g" is a non-dependent name, bound now
}
};
void g(int) { std::cout << "g(int)\n"; }
int main()
{
g(1); // calls g(int)
S<int> s;
s.f(); // calls g(double)
}
Текущая версия Visual C++ (19.0.23918.0) выдает следующий результат:
g(int)
g(int)
Это разрешено стандартом или это ошибка в MSVC?
clang++
дает выводg(int)
иg(double)
. См. живую демонстрацию здесь - person Destructor   schedule 08.06.2016