2012-07-05 11 views
6

Ist es zulässig, decltype mit virtuellen Mitgliedsfunktionszeigern zu verwenden?Verwendung von decltype mit virtuellen Mitgliedsfunktionszeigern

Folgendes erzeugt einen internen Fehler (C1001) mit VS2012.

struct C 
{ 
    virtual void Foo() {} 

    typedef decltype(&C::Foo) type; //pointer 
} 

Aber das kompiliert fein:

struct C 
{ 
    virtual void Foo() {} 

    typedef decltype(C::Foo) type; //not pointer 
} 

Ist es ein Fehler?

+9

Es war "illegal", es würde eine Fehlermeldung erzeugen, kein interner Fehler. Sie haben offensichtlich einen Fehler im Compiler gefunden. – AnT

+3

@AndreyT: +1, ich würde hinzufügen, dass: * auch wenn es illegal war, sollte es keinen internen Fehler verursachen *. –

Antwort

4

MSVC hat mehrere bekannte Probleme mit decltype zu Mitgliedsfunktionszeigern; siehe auch Using decltype with member function pointers

Dies ist die gesetzliche Syntax; g ++ ist damit vollkommen zufrieden (http://ideone.com/sTZi6). Es gibt nichts im Standard, um den Betrieb von decltype auf Elementfunktionen zu beschränken.

+0

thx. Übrigens ist der Link auch eine meiner Fragen. ;-) – Nubcase

Verwandte Themen