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
typenameanging. 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!
