Ist das Template-Qualifikationsmerkmal in nicht abhängigen Membervariablen der Klassenvorlage erforderlich?

8

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?

    
Takatoshi Kondo 29.06.2017, 05:46
quelle

1 Antwort

4

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.

    
MSalters 29.06.2017, 07:16
quelle

Tags und Links