Использование имени из шаблонного наследника в MSVC
Почему этот код компилируется компилятором x64 msvc v19.24 с опциями /std:c++17 /Wall /W4 без предупреждений? Это баг? Можно ли как-то заставить выдавать хотя бы предупреждение, типа опции -pedantic в gcc?
template <typename T>
struct A {
int x = 42;
};
template <typename T>
struct B : A<T> {
int f() {
return x;
}
};
int main() {
B<int> b;
b.f();
}
Ответы (1 шт):
Автор решения: user7860670
→ Ссылка
Это нестандартное поведение. В компиляторе msvc долгое время не был реализован двухфазный поиск имен, но потом его добавили, а чтобы не ломать старые приложения старое поведение оставили в permissive режиме. Соответственно аргумент /permissive- среди прочего выключает это старое поведение и заставлять компилятор компилировать в соответствии со стандартом и выдавать на этом примере ошибку.