enable-if

___ tag123visualstudio ___ Verwenden Sie dieses Tag, wenn Sie eine bestimmte Frage zu Visual Studio-Funktionen und -Funktionen haben. Verwenden Sie diesen Tag NICHT bei Fragen zu Code, der nur zufällig in Visual Studio geschrieben wurde. Erwägen Sie, den genauen Technologiebereich zu markieren, auf den Ihre Frage verweist, und kennzeichnen Sie auch eine spezifischere Version von Visual Studio. Bitte geben Sie Ihre genaue VS-Version, Edition und Update-Ebene in Ihrer Frage an. ___ tag123c14 ___ C ++ 14 ist der Name des C ++ - Standards, der 2014 genehmigt wurde. Er baut auf dem vorherigen C ++ 11-Standard auf und verbessert die Kernsprache und die Standardbibliothek sowie einige Funktionen. ___ tag123enabeif ___ 'std :: enable_if' ist eine C ++ Metafunktionsvorlage mit den Parametern 'bool B', 'class T = void', definiert im Standard C ++ Header 'type_traits'. Wenn "B" wahr ist, dann das Instanziieren Klasse definiert einen öffentlichen Mitgliedstyp "type" gleich "T"; sonst nicht. ___ tag123constexpr ___ constexpr ist ein in C ++ 11 eingeführter Modifikator, der den Compiler darüber informiert, dass der Wert einer Funktion oder Variablen bekannt ist oder zur Kompilierzeit berechnet werden kann. Als solches kann es als eine Konstante an Orten verwendet werden, wo es sonst nicht sein könnte. ___ qstntxt ___

Ich wrestle gerade mit Visual Studio 2017 (Kompilieren mit %code% , wenn das irgendeine Hilfe ist).

Der fragliche Code wählt einfach eine Struct-Spezialisierung aus, die auf dem Ergebnis einer templated %code% -Funktion basiert. GCC und Clang haben keine Probleme, es zu kompilieren.

Hier ist mein MCVE:

%Vor%

%code% ist in meiner Codebasis eigentlich ein bisschen komplexer, aber die %code% kompiliert immer noch, und prüft gut.

Ich nahm an, dass, wenn %code% kompiliert, es keinen Grund gibt, dass %code% nicht in der Lage ist, seine Magie zu machen. Liege ich falsch? Ich denke "vielleicht" %code% ist nicht technisch ein abhängiger Typ von %code% ... Aber wenn das der Fall wäre, würde ich erwarten, dass GCC und Klatschen mein Handgelenk schlagen.

Ich kann das umgehen, indem ich das Ergebnis von %code% in einem %code% einpacke, etwa so:

%Vor%

Aber ich würde wirklich lieber nicht durch diesen Reifen springen müssen.

Kann die Template-Auflösung das so lösen, wie ich es erwarte? Ich bin besorgt, dass der Code tatsächlich falsch ist, und GCC und Clang sind nur nachsichtig zu mir.

    
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ qstnhdr ___ enable_if funktioniert nicht in Visual Studio, wenn eine constexpr-Funktion als Argument verwendet wird ___
1
Antwort

C ++ - Iterieren über ein Tupel & Auflösung von Typ vs Konstante Parameter

Ich schreibe momentan Überladungen arithmetischer Operatoren für Tupel. Der Operator iteriert über das Tupel, um die Operation an jedem einzelnen Element auszuführen. Hier ist die Definition für Operator + =: %Vor% Leider kann GCC 4.6, wenn...
28.01.2011, 20:53
5
Antworten

Wie berechne Arraygröße während der Kompilierung (ohne Zeiger zu akzeptieren)?

Bei einem Array a möchte countof(a) die Anzahl der Elemente im Array als Kompilierzeitkonstante liefern. Wenn ich einen Zeiger p habe, möchte ich countof(p) nicht kompilieren. Dies scheint so zu sein, als ob es (1) einfach und (2) hä...
18.01.2014, 17:29
1
Antwort

Warum funktioniert SFINAE (enable_if) nicht für Member-Funktionen einer Klassenvorlage?

%Vor% Fehlermeldung: %Vor% Quelle auf cpp.sh . Ich dachte, beide typename std::enable_if<std::is_same<T,?>::value>::type könnten nicht gleichzeitig gültig sein. Bearbeiten Für die Nachwelt hier ist meine Bearbeitung...
20.06.2015, 11:05
1
Antwort

Mit C ++ 11 std :: enable_if, um die Elementfunktion zu aktivieren, wenn der Vektor eine bestimmte Länge hat

Ich schreibe eine einfache Vektorklasse und möchte einige Member-Funktionen haben, die nur in Vektoren bestimmter Länge verfügbar sind (z. B. Kreuzprodukt für einen 3-Element-Vektor). Ich stolperte über st :: enable_if und es sieht so aus, als k...
09.12.2012, 10:04
1
Antwort

Optional unterstützt die Erstellung von initializer_list für Vorlagen das Wrapping von Containern

Wenn ich eine Vorlage habe, die einen Standardcontainer umschließt, kann ich den Konstruktor initializer_list relativ leicht delegieren: %Vor% Das funktioniert zum Beispiel gut mit std :: vector. %Vor% Aber es funktioniert offensichtlich...
26.11.2012, 14:56
0
Antworten

enable_if funktioniert nicht in Visual Studio, wenn eine constexpr-Funktion als Argument verwendet wird

Ich wrestle gerade mit Visual Studio 2017 (Kompilieren mit /std:c++latest , wenn das irgendeine Hilfe ist). Der fragliche Code wählt einfach eine Struct-Spezialisierung aus, die auf dem Ergebnis einer templated constexpr -Funktion basier...
10.09.2017, 18:25