Frage

Dies kompiliert ohne Probleme in VS 2009? Bin ich dumm? GCC warnt, dass die Vorlage privat ist ....? Was vermisse ich?

#include <iostream>

using namespace std;

class A
{
private:
    template<typename T>
    A& operator<<(const T & v)
    {
        cout << v << endl;
        return *this;
    }
};

int main()
{
   A a;
   a << 4;
   system("pause");
}
War es hilfreich?

Lösung

Dieser Code sollte nicht kompilieren - dies ist ein Fehler (oder eine alberne Erweiterung) in Vs. GCC sollte es auch ablehnen. Der Bediener ist in dem von ihm verwendeten Bereich unzugänglich.

Comeau behandelt dies richtig:

"ComeauTest.c", line 28: error: function "A::operator<<(const T &) [with T=int]"
          (declared at line 14) is inaccessible
     a << 4;

Bearbeiten: Ein relevantes Standardausschnitt von 13.3/1

Hinweis: Die durch Überlastauflösung ausgewählte Funktion ist für den Kontext nicht garantiert. Andere Einschränkungen, wie die Zugänglichkeit der Funktion, können ihre Verwendung im aufrufenden Kontext schlecht geformt machen.

Andere Tipps

Microsoft bestätigt den Fehler und behauptet, er werde in der nächsten großen Version für den Compiler behoben (was ich als VC11/VS-What-Is-After-2010 gelesen habe-wahrscheinlich kein Servicepaket für VC10/VS2010):

Aus den Kommentaren scheint das Fix an einem internen Compiler -Build bereits vorgenommen zu werden.

Nein, du bist nicht dumm - es ist defekter Code und sollte abgelehnt werden. Der Comeau -Compiler (http://www.comoucomputing.com/tryitout) lehnt es richtig ab.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top