Kandidatenvorlage ignoriert: Substitutionsfehler (Fehler mit clang, aber nicht g ++)

8

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:

%Vor%

Warum?

    
Shindou 22.07.2015, 10:27
quelle

1 Antwort

4

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:

%Vor%

Tatsächlich müssen Sie impl::matrix_t nicht einmal verwenden, um den Fehler zu umgehen:

%Vor%

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

durch      

Wir 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.

    
ecatmur 22.07.2015, 15:12
quelle

Tags und Links