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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren