Perché questa funzione modello privato di compilazione? -> Compiler Bug VS 2009
-
26-10-2019 - |
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");
}
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.