auto function parameters
-
@sewing sagte in auto function parameters:
verstehe auch nicht, was das mit concepts zu tun haben soll...
Hat mit Concepts insofern zu tun, als erst n4040
auto
in Parameterlisten von Funnktionsdeklarationen erlaubt. (Generic Functions)
-
@sewing sagte in auto function parameters:
-Wall verwende ich zu Lernzwecken
-Wall verwendet man am besten IMMER. Wieso zu "Lernzwecken"?
Ich verwende auch -Wextra und -Wpedantic immer (zumindest wenn ich nicht gerade von Kommandozeile von Hand compiliere)
-
wie ist denn die Abstufung bei Wall, WExtra und WPedantic?
ich frage mich, wozu es dann noch function templates braucht, wenn man sogar hier schon auto verwenden kann
-
@sewing sagte in auto function parameters:
wie ist denn die Abstufung bei Wall, WExtra und WPedantic?
Google selbst, fauler Sack!
//edit: spoon feeding ... Invoking GCC - 3.8 Options to Request or Suppress Warnings
-
ich frage mich, wozu es dann noch function templates braucht, wenn man sogar hier schon auto verwenden kann
-
Wie hilft Dir
auto
als Parametertyp, wenn Du non-type-template Parameter willst oder template-template Parameter?
-
template<auto n> void foo();
für function templates mit reinen template parametern sehe ich damit jedenfalls keine berechtigung mehr
-
Du hast gefragt, wofür man noch
template
braucht, ... jetzt hast du dir die Antwort ja selbst gegeben.
-
ich wollte nur eine Bestätigung dafür habe, dass einfache function templates mit template parametern damit ausgedient haben. Ich lese momentan das Buch C++ Templates, the complete guide, 2nd Edition und da wird als motivierendes Einführungsbeispiel der folgende Snippet präsentiert
template<typename T1, typename T2> std::common_type_t<T1, T2> compare(T1 t1, T2 t2) { return t2 < t1 ? t2 : t1; }
so wie ich das sehe kann ich einfach schreiben
auto cmp(auto s1, auto s2) { return s1 < s2 ? s1 : s2; }
ohne jeglichen Nachteil
-
Obige Syntax wird so nicht in C++20 aufgenommen werden. Das Komitee ist sich überwiegend einig, dass Funktionstemplates als solche auch syntaktisch erkennbar sein müssen. Du wirst also künftig mindestens ein
template
vor deine ganze Definition stellen müssen (was natürlich momentan von keinem Compiler geschluckt wird). Ein aktuelles Paper dazu wäre P1079.Darüberhinaus ist
common_type
nicht exakt äquivalent zu dem Typ einer conditional expression.
-
aber es funktioniert doch schon, oder wird diese Compiler Funktion künftig dann wieder abgeschafft?
-
@sewing sagte in auto function parameters:
aber es funktioniert doch schon, oder wird diese Compiler Funktion künftig dann wieder abgeschafft?
Der g++ enthält die Testimplementierung. Concepts wird es in C++20 geben, aber die verkürzte Schreibweise wird wohl etwas anders aussehen.
-
@sewing sagte in auto function parameters:
aber es funktioniert doch schon, oder wird diese Compiler Funktion künftig dann wieder abgeschafft?
Ja, so läuft es doch immer. Heutzutage sind Clang und GCC so gut dabei, dass sie TSe implementieren, die noch nicht einmal in einer vorläufigen Endform zu haben sind. Viele der Features werden dann gestrichen, sobald das Komitee sie ablehnt. Ein Klassiker war terse range-based for. Concepts wurden nicht in C++17 aufgenommen, weil sie noch halbgar sind, aber die Compiler bieten bereits Testversionen an, um ihre vorläufigen Implementierungen zu polieren und die User mit der facility vertraut zu machen—und natürlich nicht zuletzt, weil eine Implementierung auf Basis der Spezifikation wichtig ist, um das Komitee zu überzeugen, dass es damit praktische Erfahrung gibt. Kurz: ich würde keinen Code mit dieser Syntax verfassen.