Kann ich eine variable Vorlage verwenden, um eine andere Variablenvorlage zu deklarieren?

8

Mit variablen Templates, die in C ++ 14 kommen (und Clang unterstützt sie bereits) und einem Vorschlag für Standard is_same_v 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 main kommentiert wird, spuckt Clang Folgendes aus:

  

Warnung: Variable is_pointer<type-parameter-0-0> hat interne Verknüpfung, ist aber nicht definiert

Es sieht für mich so aus (beachten Sie, dass das Ändern von T in int * in foo einwandfrei funktioniert). Wenn Sie die Zeile in main auflösen, um foo zu instanziieren, erhalten Sie (auch hier: T bis int * funktioniert):

  

Fehler: constexpr Variable foo<int *> muss durch einen konstanten Ausdruck initialisiert werden

Wenn jedoch foo 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?

    
chris 26.01.2014, 02:12
quelle

2 Antworten

3

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 .

    
Richard Smith 05.02.2014, 20:28
quelle
0

Folgendes scheint zu funktionieren:

%Vor%

Live-Beispiel

Obwohl es die gleiche Warnung gibt, wenn es in einem constexpr Kontext verwendet wird, nehme ich an, dass es nicht wirklich funktioniert.

%Vor%

Es hört auf sich zu beschweren, wenn Sie foo einen expliziten Typ geben:

%Vor%

Oder benutzen Sie einfach test<T>::is_pointer direkt:

%Vor%     
user1508519 26.01.2014 04:43
quelle

Tags und Links