Scheint ein Clang-Bug zu sein, obwohl das Nachschlagen solcher Pseudodestruktor-Namen wahrscheinlich defekt ist und Gegenstand von offenen CWG-Problemen ist, speziell 555 und 399.
Das signifikante Bit des Erweiterungsmusters ist
%Vor% Hier ist das Bit zwischen .
und ()
ein Pseudo-Destruktorname ; Die Suche nach einem qualifizierten Namen verlangt dann, dass
Wenn ein Pseudo-Destruktor-Name (5.2.4) einen geschachtelten Namen-Spezifizierer enthält, Die type-name s werden als Typen in dem von der verschachtelter Name-Specifier . Ähnlich, in einer qualifizierten ID des Formulars:
verschachtelte Namenspezifikation opt Klassenname
:: ~
KlassennameDer zweite Klassenname wird im selben Bereich wie der erste gesucht.
i.e. type
wird in std::tuple_element<I, args_type>
gesucht, wo es sich auf einen Typ bezieht. Beachten Sie, dass Klassenname ein grammatikalischer Name für Bezeichner (und einfache Vorlage-ID s) ist und sich nicht auf eine tatsächliche Klasse beziehen muss. std::get<I>(x).std::tuple_element<I, args_type>::type::~type
verweist dann auf den Destruktor von type
.
Workaround mit einer Hilfsfunktion:
%Vor%Interessanterweise erwähnt Hstong von IBM ein Paar Problemumgehungen , die besser funktionieren.
%Vor%oder
%Vor%