Ich habe folgenden Code: template <typename TC> class C { struct S { template <typename TS> void fun() const {} }; void f(const S& s) { s.fun<int>(); } }; // Dummy main function int main() { return 0; } Beim Erstellen mit gcc 9.2 und clang (9.0) wird ein Kompilierungsfehler …
Ich kam dieses Problem auf bei dem Versuch , sich zu spezialisieren tuple_size/ tuple_elementeine benutzerdefinierte Klasse in C ++ 17 für strukturierte Bindung. Der folgende Code wird in GCC kompiliert, jedoch nicht in Clang (beide Trunk-Versionen, siehe Link unten). #include <type_traits> template<typename T, typename... Ts> using sfinae_t = T; template<typename …
Ich weiß, dass dies ein ziemlich häufiges Thema ist, aber so leicht die typische UB zu finden ist, habe ich diese Variante bisher nicht gefunden. Daher versuche ich, Pixelobjekte formell einzuführen und dabei eine tatsächliche Kopie der Daten zu vermeiden. Ist das gültig? struct Pixel { uint8_t red; uint8_t green; …
Kann int (*)[]ein unvollständiger Typ sein? C 2018 6.2.5 1 sagt: An verschiedenen Stellen innerhalb einer Übersetzungseinheit kann ein Objekttyp unvollständig (ohne ausreichende Informationen zur Bestimmung der Größe von Objekten dieses Typs) oder vollständig (mit ausreichenden Informationen) sein. Wenn also die Größe eines Typs bekannt ist, scheint der Typ vollständig …
Gibt die C ++ - Spezifikation die Reihenfolge operator newund den Konstruktor von Ain an new C(A())? Das g ++ ließ die Reihenfolge sein A()-> new-> C(), aber clang ++ ließ es sein new->A() -> C(). Wird der Unterschied durch nicht angegebenes Verhalten verursacht? g ++: 7.4.0 clang ++: 10.0.0 …
Ich versuche die folgenden Codefragmente zu verstehen Snippet # 1 template <typename T> struct A { static constexpr int VB = T::VD; }; struct B : A<B> { }; Weder gcc9 noch clang9 werfen hier einen Fehler. F. Warum wird dieser Code kompiliert? Instanziieren wir nicht, A<B>wenn wir von B …
Der Ausdruck "passiert stark vor" wird im C ++ - Entwurfsstandard mehrmals verwendet. Zum Beispiel: Kündigung [basic.start.term] / 5 Wenn der Abschluss der Initialisierung eines Objekts mit statischer Speicherdauer stark vor einem Aufruf von std :: atexit erfolgt (siehe [support.start.term]), wird der Aufruf der Funktion an std :: atexit übergeben …
Der Standard sagt: Eine Deque ist ein Sequenzcontainer, der Iteratoren mit wahlfreiem Zugriff unterstützt (27.2.7). Darüber hinaus werden Einfüge- und Löschvorgänge mit konstanter Zeit am Anfang oder am Ende unterstützt. Einfügen und Löschen in der Mitte dauert linear. In derselben Klausel heißt es jedoch auch: Alle Komplexitätsanforderungen in dieser Klausel …
Ich komme aus C ++ und finde ein ganz anderes Verhalten zwischen Zeigern in C ++ und C #. Ich finde überraschenderweise, dass dieser Code kompiliert wird ... und sogar ... funktioniert perfekt. class C { private readonly int x = 0; unsafe public void Edit() { fixed (int* p …
Im folgenden Codebeispiel ifhängt die Anweisung vom boolVorlagenparameter ab, bei dem es sich um eine Konstante zur Kompilierungszeit handelt. Compiler behandeln diesen Code unterschiedlich: MSVC schlägt mit einem Verbindungsfehler fehl (was ich erwartet habe), da die Vorlagenfunktion in der elseVerzweigung nicht auf den trueWert der Vorlagenparameter spezialisiert ist (obwohl sie …
Nachdem ich mir die vorgeschlagene Auflösung von # 1664 ( vorgeschlagene Auflösung 1664 ) angesehen habe, bin ich verwirrt über die Regeln eines Standardarguments einer Funktionsvorlage. Zitieren Sie den Inhalt hier: Gemäß 8.1.5 [expr.prim.lambda] Absatz 3 Der Schließungstyp wird im kleinsten Blockbereich, Klassenbereich oder Namespace-Bereich deklariert, der den entsprechenden Lambda-Ausdruck …
Betrachten Sie das folgende Beispiel ( Snippet (0) ): struct X { constexpr int get() const { return 0; } }; void foo(const X& x) { constexpr int i = x.get(); } int main() { foo(X{}); } Das obige Beispiel wird mit allen Versionen von g++vor g++ 10.xund nie unter …
In C wird gesagt, dass, wenn Zeiger auf dasselbe Array oder ein Element nach dem Ende dieses Arrays verweisen, die Arithmetik und Vergleiche gut definiert sind. Was ist dann mit einem vor dem ersten Element des Arrays? Ist es in Ordnung, solange ich es nicht dereferenziere? Gegeben int a[10], *p; …
Wir haben eine viel größere Anwendung, die auf der Vorlagenüberladung von char- und const char-Arrays beruht. In gcc 7.5, clang und visual studio gibt der folgende Code für alle Fälle "NON-CONST" aus. Für gcc 8.1 und höher wird die Ausgabe jedoch unten angezeigt: #include <iostream> class MyClass { public: template …
Angesichts des Codes struct A {}; auto obj = new A; std::vector<unsigned char> buffer; buffer.resize(sizeof(obj)); std::memcpy(buffer.data(), &obj, sizeof(obj)); // this copies the pointer, not the object! // ... auto ptr = *reinterpret_cast<A**>(buffer.data()); // is this UB? delete ptr; ist die Verwendung von reinterpret_castin diesem Fall UB? Ich würde ja sagen, …
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.