Ich suche nach einer Möglichkeit, ein Trace-Protokoll aus der Logik des Compilers zu erhalten, wenn es versucht, Template-Argumenttypen abzuleiten, wann immer es Erfolg hat oder nicht. So zum Beispiel gegeben dann Code:
%Vor%Ich würde gerne etwas wie:
erhalten %Vor% Compiler sind schon ziemlich gut darin, zum Beispiel die mehrdeutigen Aufrufe zu liefern. Z.B. Wenn ich foo(std::string("qwe"));
aufrufen würde, bekomme ich:
Und wenn diese explizite Rückmeldung nicht möglich ist, gibt es vielleicht eine Möglichkeit, den "semi-kompilierten" Code zu sehen, wobei alle Vorlagenabzüge bereits durchgeführt wurden.
Hat einer der Compiler diese Funktion? gcc, klingeln, mvsc?
Dieses Beispiel ist ziemlich einfach und offensichtlich, aber ich experimentiere mit ranges::v3
library und habe Mühe herauszufinden, warum ein bestimmter Fall funktioniert und warum der andere nicht.
(Technisch liefert iterator_range<Handmade InputIterator>
piped mit view::take(3)
% void
anstatt% fancy range
, ist aber nicht von dieser Frage betroffen. Ich möchte den Abzug auf fast derselben Linie verfolgen, aber mit iterator_range<ContiguousIterator>
und sehe den Unterschied .
Templight ist ein clangbasiertes Tool zum Verfolgen des Fortschritts von Template-Instanziierungen. Es hat eine Schnittstelle ähnlich dem GDB-Debugger, so dass Sie sich auf eine bestimmte Instanziierung konzentrieren können, die Fehler verursacht oder sich nicht wie erwartet verhält. Oder Sie können ein "Profil" der Template-Instanziierungen ausgeben, die einen Überblick über alle von ihnen geben.
Es gibt auch ein ähnliches Tool Templer , das offensichtlich eine grafische Oberfläche zu Templights Debugger-Modus ist, obwohl ich es selbst nicht ausprobiert habe .