Question

compiles avec des problèmes sur VS 2009? Suis-je stupide? GCC donne un avertissement, que le modèle est privé ....? Qu'est-ce que je manque?

#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");
}
Était-ce utile?

La solution

Ce code ne doit pas compiler - c'est un bug (ou l'extension stupide) VS. GCC refuse aussi. L'opérateur est inaccessible dans le champ d'application, il est utilisé.

Comeau traite cela correctement:

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

EDIT: Un extrait norme correspondante, à partir de 13,3 / 1

[Note: la fonction sélectionnée par la résolution de surcharge est pas garantie être adaptée au contexte. D'autres restrictions, telles que la l'accessibilité de la fonction, peut rendre son utilisation dans le contexte d'appel mal formé. ]

Autres conseils

Microsoft reconnaît le bug et les revendications, il sera corrigé dans la prochaine version majeure pour le compilateur (que je lisais VC11 / VS-tout-est-après 2010 - probablement pas un service pack pour VC10 / VS2010):

dans les commentaires, le correctif semble déjà une version interne du compilateur.

Non, vous n'êtes pas stupide - il est un code cassé et doit être rejeté. Le compilateur Comeau ( http://www.comeaucomputing.com/tryitout ) ne correctement rejeter.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top