Als «language-lawyer» getaggte Fragen

Bei Fragen zu den Feinheiten formaler oder maßgeblicher Spezifikationen von Programmiersprachen und -umgebungen.


4
Breaking Änderung in C ++ 20 oder Regression in Clang-Trunk / Gcc-Trunk beim Überladen des Gleichheitsvergleichs mit nicht-booleschem Rückgabewert?
Der folgende Code lässt sich gut mit Clang-Trunk im C ++ 17-Modus kompilieren, bricht jedoch im C ++ 2a-Modus (bevorstehendes C ++ 20) ab: // Meta struct describing the result of a comparison struct Meta {}; struct Foo { Meta operator==(const Foo&) {return Meta{};} Meta operator!=(const Foo&) {return Meta{};} }; …


1
Warum wählt der Compiler diese generische Methode mit einem Klassentypparameter, wenn er mit einem nicht verwandten Schnittstellentyp aufgerufen wird?
Betrachten Sie die folgenden zwei Klassen und Schnittstellen: public class Class1 {} public class Class2 {} public interface Interface1 {} Warum ruft der zweite Aufruf mandatorydie überladene Methode auf Class2, wenn getInterface1und Interface1hat keine Beziehung zu Class2? public class Test { public static void main(String[] args) { Class1 class1 = …

2
Muss T ein vollständiger Typ sein, um in `std :: declval <T>` verwendet zu werden?
Betrachten Sie dieses Beispiel (von hier ): #include &lt;type_traits&gt; #include &lt;iostream&gt; template &lt;typename U&gt; struct A { }; struct B { template &lt;typename F = int&gt; A&lt;F&gt; f() { return A&lt;F&gt;{}; } using default_return_type = decltype(std::declval&lt;B&gt;().f()); }; int main() { B::default_return_type x{}; std::cout &lt;&lt; std::is_same&lt; B::default_return_type, A&lt;int&gt;&gt;::value; } Es wird …

2
Abzug der Argumenttypen für C ++ - Vorlagenvorlagen
Ich habe Code, der Übereinstimmungen eines Musters findet und ausdruckt, indem er über den Container mit Zeichenfolgen geht. Der Druck wird in der Funktion ausgeführt foo , die als Templat wird Der Code #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;iterator&gt; #include &lt;vector&gt; #include &lt;string&gt; #include &lt;tuple&gt; #include &lt;utility&gt; template&lt;typename Iterator, template&lt;typename&gt; …

1
Wird ein auf CHAR_MAX eingestellter Zeichenwert garantiert in CHAR_MIN umgebrochen?
Mein Code: #include &lt;stdio.h&gt; #include &lt;limits.h&gt; int main() { char c = CHAR_MAX; c += 1; printf("CHAR_MIN=%d CHAR_MAX=%d c=%d (%c)\n", CHAR_MIN, CHAR_MAX, c, c); } Ausgabe: CHAR_MIN=-128 CHAR_MAX=127 c=-128 () Wir sehen, dass, wenn wir eine charVariable inkrementieren CHAR_MAX, diese umbrochen wird CHAR_MIN. Ist dieses Verhalten garantiert? Oder handelt es …


1
Unerwartete InvalidOperationException beim Versuch, die Beziehung über den Standardwert der Eigenschaft zu ändern
Im folgenden Beispielcode wird dabei die folgende Ausnahme angezeigt db.Entry(a).Collection(x =&gt; x.S).IsModified = true: System.InvalidOperationException: 'Die Instanz des Entitätstyps' B 'kann nicht verfolgt werden, da bereits eine andere Instanz mit dem Schlüsselwert' {Id: 0} 'verfolgt wird. Stellen Sie beim Anhängen vorhandener Entitäten sicher, dass nur eine Entitätsinstanz mit einem bestimmten …



2
Konstruieren Sie Standardausnahmen mit Nullzeigerargumenten und unmöglichen Nachbedingungen
Betrachten Sie das folgende Programm: #include&lt;stdexcept&gt; #include&lt;iostream&gt; int main() { try { throw std::range_error(nullptr); } catch(const std::range_error&amp;) { std::cout &lt;&lt; "Caught!\n"; } } GCC und Clang mit libstdc ++ rufen std::terminatedas Programm mit der Nachricht auf und brechen es ab terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct …

1
Ist es UB, eine Elementfunktionskoroutine eines Objekts wieder aufzunehmen, dessen Lebensdauer abgelaufen ist?
Diese Frage ergibt sich aus diesem Kommentar: Erklärung der Lambda-Lebensdauer für C ++ 20-Coroutinen zu diesem Beispiel: auto foo() -&gt; folly::coro::Task&lt;int&gt; { auto task = []() -&gt; folly::coro::Task&lt;int&gt; { co_return 1; }(); return task; } Die Frage ist also, ob die Ausführung der von zurückgegebenen Coroutine zu fooUB führen würde. …

1
Nicht spezifizierte implizite Objekterstellung
Da P0593 die implizite Erstellung von Objekten für die Objektmanipulation auf niedriger Ebene akzeptiert wurde, können Objekte jetzt implizit in C ++ 20 erstellt werden. Insbesondere ermöglicht der durch den Vorschlag eingeführte Wortlaut, dass bestimmte Vorgänge (z. B. std::malloc) automatisch die Lebensdauer von Objekten bestimmter Typen, sogenannte implizite Lebensdauer-Typen , …


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.