Als «c++20» getaggte Fragen

C ++ 20 ist das Ziel für die Version von C ++ nach C ++ 17. Dieses Tag sollte (zusammen mit dem C ++ - Tag) für Fragen zu C ++ - Funktionen verwendet werden, die für C ++ 20 auf dem richtigen Weg sind.

1
if constexpr - warum wird die verworfene Anweisung vollständig überprüft?
Ich habe mit C ++ 20 Consteval in GCC 10 herumgespielt und diesen Code geschrieben #include <optional> #include <tuple> #include <iostream> template <std::size_t N, typename Predicate, typename Tuple> consteval std::optional<std::size_t> find_if_impl(Predicate&& pred, Tuple&& t) noexcept { constexpr std::size_t I = std::tuple_size_v<std::decay_t<decltype(t)>> - N; if constexpr (N == 0u) { return …

3
std :: bit_cast mit std :: array
In seinem kürzlich gehaltenen Vortrag "Type punning in modernem C ++" sagte Timur Doumler , dass std::bit_castdies nicht zum Bit-Casting floatin ein verwendet werden kann, unsigned char[4]da Arrays im C-Stil nicht von einer Funktion zurückgegeben werden können. Wir sollten entweder std::memcpyC ++ 23 (oder später) verwenden oder warten, bis etwas …


1
Muss `gleichheit_vergleich_mit`` gemeinsame_referenz` erfordern?
Das Konzeptequality_­comparable_with<T, U> soll erklären, dass Objekte vom Typ Tund Umiteinander verglichen werden können, und wenn dies der Fall ist, hat dies die erwartete Bedeutung. Das ist gut. Dieses Konzept muss common_reference_t<T&, U&>jedoch auch existieren. Der Hauptimpuls für common_referenceund die damit verbundene Funktionalität scheint darin zu bestehen, Proxy-Iteratoren zu ermöglichen …

1
C ++ 20-Definition außerhalb der Klasse in einer Vorlagenklasse
Bis zum C ++ 20-Standard von C ++, als wir einen Operator außerhalb der Klasse definieren wollten, der einige private Mitglieder einer Vorlagenklasse verwendet, verwendeten wir ein ähnliches Konstrukt: template <typename T> class Foo; template <typename T> constexpr bool operator==(T lhs, const Foo<T>& rhs); template <typename T> class Foo { …
12 c++  templates  c++20 

1
Ist das Captureless Lambda nach dem Standard garantiert leer?
Ich suche nach einer Möglichkeit, leere (Captureless) Lambdas von anderen Lambdas in einer Vorlagenfunktion zu identifizieren. Ich verwende derzeit C ++ 17, bin aber auch neugierig auf C ++ 20-Antworten. Mein Code sieht folgendermaßen aus: template<typename T> auto func(T lambda) { // The aguments of the lambdas are unknown if …
12 c++  lambda  c++17  c++20 



2
Ein Konzept an eine Funktion übergeben
Ist es auch möglich, diese Prädikate für Algorithmen zur Kompilierungszeit wiederzuverwenden, da Konzepte als Prädikate zur Kompilierungszeit definiert sind? Wäre es beispielsweise möglich zu überprüfen, ob alle Typen in einem Tupel einem Konzept entsprechen? Soweit ich gesehen habe, ist es nicht möglich, ein Konzept in irgendeiner Weise an eine Funktion …


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
Kann Span constexpr sein?
Alle Konstruktoren von std :: span sind als constexpr deklariert, aber ich kann anscheinend keinen von ihnen dazu bringen, in einem constexpr-Kontext zu arbeiten. Das Kommentieren eines der folgenden Constexpr führt zu einem Kompilierungsfehler. #include <array> #include <span> int main() { constexpr int carray[3] = { 0, 1, 2 }; …
11 c++  constexpr  c++20 


1
Warum fehlen std :: span die Vergleichsoperatoren?
War das nicht std::spanals leichte Referenz für Unterregionen von std::vector/ std::array/ plain array und ähnlich konzipiert? Sollte es nicht auch Vergleichsoperatoren in seiner API enthalten, um mit ihnen konsistent zu sein? Was war der Grund für den Ausschluss? Hinweis: von Vergleichsoperatoren, ich meine , entweder den vollen Satz ( <, …
10 c++  std  c++20  std-span 

1
Werden wir in der Lage sein, Container mit Ansichten in C ++ 20 zu erstellen?
Mit der C ++ 20-Standardversion kommen Bereiche nach C ++. Meine Frage: Werden wir in der Lage sein, (vorhandene) Standardbibliothekscontainer mit einem beliebigen Bereich zu erstellen? Und was noch wichtiger ist, mit Entfernungsansichten? Zum Beispiel wird dies: #include <vector> #include <iostream> #include <ranges> int main() { auto sq = [](int …
10 c++  c++20  range-v3 

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.