Ihr Code ist gültig und wird von SVN akzeptiert. Der Link-Fehler wurde verursacht durch Clang Bug 17846 , was ich fixed vor ein paar Tagen .
Mit variablen Templates, die in C ++ 14 kommen (und Clang unterstützt sie bereits) und einem Vorschlag für Standard %code% und ebenfalls Typeigenschaften, dachte ich, dass ich in der Lage wäre, neue Typmerkmale wie folgt zu erstellen:
%Vor%Leider führt dies zu Fehlern, die der folgenden SSCCE entsprechen ( diese enthält alles, was unten erwähnt wird):
%Vor%Wenn die Zeile in %code% kommentiert wird, spuckt Clang Folgendes aus:
Warnung: Variable %code% hat interne Verknüpfung, ist aber nicht definiert
Es sieht für mich so aus (beachten Sie, dass das Ändern von %code% in %code% in %code% einwandfrei funktioniert). Wenn Sie die Zeile in %code% auflösen, um %code% zu instanziieren, erhalten Sie (auch hier: %code% bis %code% funktioniert):
Fehler: constexpr Variable %code% muss durch einen konstanten Ausdruck initialisiert werden
Wenn jedoch %code% durch die folgende alte Syntax ersetzt wird, funktionieren beide Instanzen einwandfrei:
%Vor%Gibt es etwas, das mir an variablen Vorlagen fehlt? Gibt es eine Möglichkeit, neue variable Vorlagen mit ihnen zu erstellen, oder bin ich gezwungen, die ältere Syntax zu verwenden, um neue zu erstellen und genieße nur den syntaktischen Zucker, wenn ich sie für anderen Code verwende?
Folgendes scheint zu funktionieren:
%Vor%Obwohl es die gleiche Warnung gibt, wenn es in einem %code% Kontext verwendet wird, nehme ich an, dass es nicht wirklich funktioniert.
%Vor%Es hört auf sich zu beschweren, wenn Sie %code% einen expliziten Typ geben:
%Vor%Oder benutzen Sie einfach %code% direkt:
%Vor%