Grüß euch Ich bin heute draufgekommen dass einer meiner type traits zur Erkennung von "ist von Template geerbt" für einen Sondernfall nicht richtig funktioniert. Der volle Code findet sich hier: https://ideone.com/UVq3Pz Wie man am Output sieht funktioniert der trait für s0 und s1, für s2 jedoch nicht. Ich vermute dass das was mit der type deduction des leeren variadic packs zu tun hat... Hat wer eine Idee wie man in dem Fall drumherum basteln könnte? tia
Zeile 21 auskommentieren und auf die Compiler Fehler achten kann ggf. beim Debuggen helfen...
Beitrag #5349567 wurde vom Autor gelöscht.
Meine neueste Vermutung ist, dass die EBO bei std::tuple irgendwie Schuld ist. In die bin ich auch schon bei folgendem Bug gelaufen: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71096 Leg ich eine eigene Typliste von der ich wiederum erbe, dann funktioniert der trait...
Ich weiß nicht, ob dir das weiterhilft, mit VS2017 ist die ausgabe richtig (1,1,1)
Vincent H. schrieb: > Meine neueste Vermutung ist, dass die EBO bei std::tuple irgendwie > Schuld ist. Gut möglich. std::tuple<X> leitet u.U. indirekt von X ab, also ist S<std::tuple<>> indirekt von std::tuple<> abgeleitet, somit weiß der Compiler nicht welche Stufe er nehmen soll. Die Zwischen-Basisklasse _Head_base ist zwar private was hier aber anscheinend nicht weiter hilft. Das S hier von std::tuple<std::tuple<>> ableitet ist gewünscht ja?
Vincent H. schrieb: > Meine neueste Vermutung ist, dass die EBO bei std::tuple irgendwie > Schuld ist. In die bin ich auch schon bei folgendem Bug gelaufen: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71096 > > Leg ich eine eigene Typliste von der ich wiederum erbe, dann > funktioniert der trait... Ja, ich denke auch, dass Du hier Opfer des Bugs bist. Ich habe spaßeshalber meine eigene tuple<>-Implementierung mal genommen (aus meinem stdlibc++-Ersatz für die AVR): damit geht es, wenn ich diesen Overload noch hinzufüge:
1 | static constexpr std::true_type f(const U<>&); |
Danke für eure Hilfe. Das hat mich echt einiges an Nerven gekostet. :) Ja dass S von tuple<tuple>> Ableitet war in dem Beispiel bewusst. Das ist ja auch die einzige Konstellation in der der Fehler auftritt. :D Bin da wie gesagt auch nur drüber gestolpert weil in meinem Code ein skuriler Randfall nicht funktioniert hat...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.