Es scheint eine Regression in C++ - Compiler in VS2015 Update 2 - falsche Adresse einer Basisklasse Datenelement wird berechnet, wenn mehrere Vererbung mit einer der Klassen verwenden ein virtueller Destruktor. Code-Beispiel:Zeiger auf eine nicht statische Datenelemente in VS2015 falsch Update 2
// Example program
#include <iostream>
#include <limits>
struct V
{
virtual ~V() {};
};
struct B
{
int i;
};
struct A : public B, public V
{
};
int main()
{
int A::* a1 = &A::i;
A a;
a.i = std::numeric_limits<int>::max();
if (a.*a1 == std::numeric_limits<int>::max())
std::cout << "ok\n";
else
std::cout << "nok\n";
}
Es sieht aus wie a1 die zu V-Tabelle versetzt wird statt i.
Dieser Code verwendet ok in VS2015 bis Update 1 und nok in Update drucken 2. Meine Kontrollen in GCC und Clang gedruckt auch ok.
Gibt es Einschränkungen bei der Mehrfachvererbung beim Arbeiten mit Zeigern an Mitglieder?