C++ type trait, type deduction für leeres variadic pack

OP #5348900
Lesenswert?
• ▲
▼
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
Beitrag #5349567 wurde von einem Moderator gelöscht.
Gast #5350187
Lesenswert?
• ▲
▼
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?
#5350229
Lesenswert?
• ▲
▼
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<>&);
OP #5350236
Lesenswert?
• ▲
▼
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...

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.