Kleines const-Iterator-Problem
-
Hallo, Freunde des C++!
Ich hab hier ein kleines Problem bei meiner Iterator-Facade, das sich auf eine einfache Typproblematik reduzieren lässt:
std::remove_reference_t<decltype(*std::declval<Iterator>()->second)>Wie man vielleicht sehen mag, will ich über die dereferenzierten Zeiger in den Werten einer Map iterieren. Das Problem ist jetzt allerdings, dass der genannte Ausdruck für einen map<...>::const_iterator einen Nicht-const-Wertetyp liefert. Warum?
Hier ist der erste Template-Fehler-Stackeintrag mit dem Typ, wie er auftritt:
see reference to class template instantiation 'boost::iterator_facade< utility::indirect_value_iterator<std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<const _Kty,_Ty>>>>>, graph::Node, // die Map hält std::shared_ptr<graph::Node> std::bidirectional_iterator_tag, Value &,ptrdiff_t >' being compiledVielen Dank schonmal!
-
Entschuldigt, der Fehler lag nicht darin, dass der Ausdruck kein const ergibt. Allerdings funktioniert der Code nun, obwohl ich an der Typ-Verwurstelung nichts geändert habe, aber er dürfte nicht funktionieren, zumindest nicht nach den Typen, die in der Fehlermeldung angegeben wurde. Kann es sich um einen Fehler in der Fehlermeldung handeln? Eigentlich muss da "const graph::Node" stehen!