Ce code compile avec MSVC 2015, mais ne compilent pas avec Clang 5.0.0 (tronc 304874):Est-ce obligatoire pour accéder aux identifiants Base <T> des classes dérivées?
template <typename T>
struct Base
{
T data;
};
template <typename T>
struct Derived : Base<T>
{
auto getData() const
{
return data;
}
};
Remplacement data
avec this->data
dans Derived::getdata()
rend Clang heureux.
Quel compilateur est correct selon la norme C++?
Doit-on utiliser le code this->
pour accéder à un identificateur d'une classe de base?
msvc est faux, évidemment. 'data' est un nom dépendant. –
clang est correct, msvc est faux. –
MSVC est rompu en ce qui concerne les règles de recherche en deux phases, qui incluent des noms dépendants. – Quentin