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 ...
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.
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.
Tags und Links c++ clang variadic-templates c++14