const_iterator bei einem generischen Datentyp T



  • Hallo,
    ich habe eine Frage zu dem Code, der unten steht. In einer älteren Version von Visual Studio lässt sich der Code compilieren. Mit aktuellen Visual Studio und C++20 geht es nicht mehr. Vermute mal, dass der Compiler das nicht macht, weil für den generischen Datentyp T nicht gesichert ist, ob er einen const_iterator hat. Gibt es eine Lösung für dieses Problem? Weiß da nicht weiter.

    template <class T>
    void foo(const T& Items)
    {
    	for (T::const_iterator c = Items.begin(); c != Items.end(); ++c)
    	{
              ...
    	}
    }
    


  • @asd1 sagte in const_iterator bei einem generischen Datentyp T:

    for (T::const_iterator c

    for (typename T::const_iterator c...

    PS: Sagt die Fehlermeldung das nicht? Poste immer gerne mit Fehlermeldung. Gcc sagt da sowas wie need 'typename' before 'T::const_iterator' - und das sollte eigentlich unabhängig vom Standard sein.

    Vermute mal, dass der Compiler das nicht macht, weil für den generischen Datentyp T nicht gesichert ist, ob er einen const_iterator hat.

    Das ist Blödsinn, weil dann Templates gar nicht funktionieren würden. Sowas kannst du neuerdings mit concepts machen.



  • Das klappt. Vielen Dank!



  • Oder einfach auto und cbegin, cend nehmen. Oder ne range based for loop.



  • @wob sagte in const_iterator bei einem generischen Datentyp T:

    PS: Sagt die Fehlermeldung das nicht? Poste immer gerne mit Fehlermeldung. Gcc sagt da sowas wie need 'typename' before 'T::const_iterator' - und das sollte eigentlich unabhängig vom Standard sein.

    Ja, ich erinnere mich noch vage daran, dass Visual C++ mal sehr tolerant war, was fehlende typename anging. Vor etlichen Jahren musste ich mal einiges an Code anpassen, weil GCC mit bis dahin in VS geschriebenem Code gehörig die Krise bekam 😉



  • auto, tuut-tuut! 🙂


Log in to reply