Warum kann dies nicht mit GCC 4.4 kompiliert werden?
%Vor% Es muss etwas mit dem Namespace von do_it
zu tun haben. Wenn ich den Namensraum darum entferne, kompiliert er.
Hintergrund: Ich entwickle eine Reihe von Funktionen, die mit vielen verschiedenen Container-Klassen verwendet werden können. Um die verschiedenen Schnittstellen einheitlich zu behandeln, verwende ich freistehende Funktionen, die für jede der Containerklassen überladen sind. Diese Funktionen sollten in einen Namespace eingefügt werden, um zu vermeiden, dass der globale Namespace mit ihnen überflutet wird.
Die Definitionen für B sollen so aussehen, als stammten sie aus einer anderen Headerdatei als die von A, daher ist eine Neuordnung keine Option.
Der Grund ist, dass nur ADL zum Zeitpunkt des Anrufs ausgeführt wird. Andere Funktionsnachfragen werden nur in der Definition der Funktionsvorlage myfun
durchgeführt.
Und bei diesem Definitionskontext wird nur die do_it
Überladung deklariert, die die A<int>
akzeptiert.
Bearbeiten: Wenn Sie eine Standardreferenz dafür haben möchten, beziehen Sie sich auf [temp.dep.candidate] und [temp.res] p1.