Ich habe ein Problem mit Substitutionsfehlern, und Antworten auf ähnliche Fragen helfen mir nicht.
Hier ist der Code:
%Vor%Und ich nenne diese Template-Funktion so:
%Vor%Mit g ++ wird kompiliert.
Bei der Verwendung von clang ++ (linux) zum Kompilieren ( clang++ -std=c++11 xxx.cpp
) kam es zu folgendem Kompilierungsfehler:
Warum?
Es ist ein Bug im Klirren; Es verhält sich falsch, wenn eine Alias-Vorlage, die einen Array-Typ definiert, in einer Klassenvorlage definiert ist. Tatsächlich kann es zum Absturz des Compilers ausgenutzt werden :
%Vor% Da in Ihrem Fall Reference::matrix_t
nicht von den Vorlagenargumenten für Reference
abhängt, wäre die einfachste Lösung, die Definition von matrix_t
in den Namespace-Bereich zu verschieben:
Tatsächlich müssen Sie impl::matrix_t
nicht einmal verwenden, um den Fehler zu umgehen:
Dies ist jetzt behoben (das Update sollte in der clang release Version 3.8 sein. 0):
[AST] Führen Sie eine zusätzliche Kanonisierung für DependentSizedArrayType
durchWir haben DependedSizedArrayTypes mit demselben Elementtyp aber behandelt Ausdrücke unterschiedlicher Größe als äquivalent kanonisch. Das würde führen bizarres Verhalten während der Template Instanziierung.
Dies behebt PR24212.