Domanda

Questa compila con problemi fuori in VS 2009? Sono stupido? GCC dà un avvertimento, che il modello è privato ....? Che cosa mi manca?

#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");
}
È stato utile?

Soluzione

Questo codice non deve compilare - si tratta di un bug (o estensione sciocco) in VS. GCC dovrebbe rifiutare pure. L'operatore è inaccessibile nel campo di applicazione viene utilizzato.

Comeau tratta questo modo corretto:

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

EDIT: Un frammento di rilevante di serie, dal 13,3 / 1

[Nota: la funzione selezionata da la risoluzione di sovraccarico non è garantito in modo appropriato per il contesto. Altre restrizioni, come il accessibilità della funzione, lattina fare il suo uso nel contesto chiamando mal formati. ]

Altri suggerimenti

Microsoft riconosce il bug e richieste verrà risolto nella prossima major release per il compilatore (che ho letto come VC11 / VS-qualunque-è-dopo-2010 - probabilmente non un service pack per VC10 / VS2010):

dai commenti, la correzione sembra essere già fatto per una build compilatore interno.

No, non sei stupido - è il codice rotto e deve essere respinto. Il compilatore Comeau ( http://www.comeaucomputing.com/tryitout ) non correttamente respingerla.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top