Frage

Betrachten Sie den folgenden Code ein:

template<class T, class F>           struct X {};
template<class T, class F, T F::* m> struct Y {};

struct Foo {
    int member;
    typedef X<int, Foo>               x_type; // works well
    typedef Y<int, Foo, &Foo::member> y_type; // ERROR
};

typedef Y<int, Foo, &Foo::member> y_type2; // OK

Warum Compiler-Fehler erzeugen? (VS2008)


Neu

Ich habe diesen Fehler gebucht connect.microsoft.com .

War es hilfreich?

Lösung 2

Dies ist ein Fehler rel="nofollow

Andere Tipps

Ich denke, dass es irgendwie mit dem Visual C ++ verwendet ist nicht wissen, die Größe der Zeiger auf ein Element an diesem Punkt. Überprüfen Sie dieses Defekts Bericht zum Beispiel ( hier ist ein weiteres Problem mit Zeiger auf Membervariable). Ich denke, dass Sie einen weiteren Visual C ++ Fehler gefunden und es sollte zu connect.microsoft.com gemeldet werden.

Ich stolperte über das gleiche Problem. Die Unterstützung für Zeiger-to-Mitglied Vorlage Argumente beschränkt sich nach wie vor in VC ++ (siehe Bugreport ) .

In meinem Fall konnte ich es umgehen, indem Sie eine Vorlage Funktion I.S.O. mit eine Template-Klasse:

template< typename Class > struct CMemberDumper {
    Class& object;
    template< typename M > void visit_member( M C::*pm ) {
       std::cout << object.*pm;
    }
};
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top