Ich habe den Kompilierfehler "error: use 'template' Schlüsselwort verwendet, um 'foo' als abhängigen Vorlagennamen zu behandeln", wenn ich den folgenden Code in der kommentierten Zeile kompiliere. (test4)
Alle anderen Teile von Codes wurden erfolgreich kompiliert.
%Vor% test4
ist eine Klassenvorlage, aber m ist kein abhängiger Typ.
Ich habe versucht, gcc und clang zu kompilieren. gcc 7.1.0 meldet keine Fehler, aber clang 4.0 und höher melden den Kompilierfehler.
Fehler
Ссылка (Klang 4.0) Ссылка (Kopf klingeln)
Kein Fehler
Ссылка (gcc 7.1.0)
Welches ist das richtige Verhalten?
Ich werde Ihrem Verdacht zustimmen. Dies ist in der Tat ein Clang Bug.
template
ist nur dann erforderlich, wenn t0
ein abhängiger Name ist. Insbesondere ist es erforderlich, wenn t0
von T
abhängt. Und das ist die T
in test4<T>
.
Nun hängt t0
von my m
ab, und es gibt my::foo<T>
, aber das ist eine nicht verwandte T
in einem anderen Bereich. Außerdem hängt t0
nicht von my::foo<T>
ab.