Ich habe eine Template-Klasse mit einem verschachtelten Template-Custom-Iterator (spezialisiert auf const/non-const Iteratoren) wie folgt :
template
struct A
{
template
struct AIterator
{
//...
};
typename AIterator iterator;
typename AIterator const_iterator;
};
template
bool operator==(const typename A::iterator& lhs,
const typename A::iterator& rhs,)
{
//...
}
template
bool operator!=(const typename A::iterator& lhs,
const typename A::iterator& rhs,)
{
//...
}
//das Gleiche für const_iterator...
Aber clang kann den Template-Parameter nicht ableiten :
snake_test.cpp:17:68: Fehler: Ungültige Operanden für binären Ausdruck ('wavelet::Snake::const_iterator' (aka 'Iterator') und 'const_iterator' (aka 'Iterator'))
for (wavelet::Snake::const_iterator it = snake.begin(); it != snake.end(); it++)
~~ ^ ~~~~~~~~~~~
./snake.hpp:150:6: Hinweis: Ignoriertes Kandidaten-Template: Konnte den Template-Argument 'T' nicht ableiten
bool operator!=(const typename Snake::iterator& lhs,
^
./snake.hpp:164:6: Hinweis: Ignoriertes Kandidaten-Template: Konnte den Template-Argument 'T' nicht ableiten
bool operator!=(const typename Snake::const_iterator& lhs,
^
1 error generated.
Was mache ich falsch? Wie implementiere ich benutzerdefinierte Iteratoren für Template-Klassen?