Simultaner Fehler bei der Erweiterung des Parameterpakets für nicht verwendete Schablonentypdefinitionen

8

Das Problem, auf das ich gestoßen bin, ist die folgende Warnung von clang (c ++ 14):

  

Pack-Erweiterung enthält das Parameterpaket 'v_seconds', das eine andere Länge (3 gegenüber 1) von den äußeren Parameterpaketen

hat

Das Problem tritt im folgenden Beispielcode auf:

%Vor%

Wie ich den Fehler interpretiere ist, dass irgendwie eine Spezialisierung von any_pairs_list , in der v_seconds eine Länge von 1 hat, angetroffen wird, und dann natürlich ein Fehler auftritt.

Allerdings ist der obige Code der gesamte Beispielcode - ich nie verwende eine Spezialisierung von any_pairs_list .

Ich muss also schlussfolgern, dass trotzdem eine Spezialisierung geschaffen wird ...

Nun die übliche TMP-Forking-Frage:

%Vor%

P.S. Ich habe mit der Installation von Apple Clang (v8.1.0) und auch mit Visual Studio 2017 Clang Erweiterung getestet. Leider habe ich keine Linux-Umgebung zum Testen in ...

    
AngelGabriel 03.05.2017, 01:37
quelle

2 Antworten

2

Meine beste Vermutung ist, dass Clang eine Art von Heuristik verwendet, um nach inhärent unstantiierbaren Vorlagen zu suchen. Vielleicht entscheidet es (fälschlicherweise), dass es ein Argument für den Alias ​​in any_pairs_list gibt, weil es sich nicht richtig mit Pack-Expansionen befasst und dann einen eindeutigen synthetischen Typ verwendet, um zu testen, ob das im Prinzip funktionieren könnte. Immerhin erhalten Sie genau die gleiche Fehlermeldung, wenn Sie kein Paket, sondern nur einen Bog-Standard-Template-Parameter verwenden.

Wird als # 32905 gemeldet.

    
Columbo 03.05.2017, 11:09
quelle
0

Keine Lösung, sondern ein Workaround. Machen Sie pairs_list eine Struktur mit einem Member typedef mit dem Namen type . Da dies funktioniert, würde ich sagen, dass dies ein Fehler in der Aliasvorlage using in Clang ist.

%Vor%     
Henri Menke 03.05.2017 02:33
quelle