Ich portiere meinen C++ Windows-Code (msvc & Intel) nach Linux (g ++). Der Code verwendet viele Vorlagen (Ich mag Metaprogrammierung ;-). Aber ich kann diesen Code nicht kompilieren:g ++ Vorlage Problem
template <class TA>
struct A
{
template <class TAB> struct B;
};
template <class TC>
struct C {};
template <class TD>
struct D
{
template <class TTD> class T {};
};
template<class TA>
template<class TBA>
struct A<TA>::B : C<typename D<TA>::T<TBA> >
{
int foo;
};
g ++ mir sagt, dass in der Definition von A :: B, C-Klasse ungültig Vorlage Argumente hat. Aber auf MSVC und Intel funktioniert es gut! Was ist das Problem hier? PS: Entschuldigung, ich kann den Originalcode nicht posten, weil er zu aufwendig ist. Aber dieses Beispiel ist praktisch das gleiche und gibt den gleichen Fehler auf g ++. Danke.
UPDATE: Ich habe das Problem gefunden ist in TBA Argument von T. g ++ Doesn nicht wie die Verwendung von zweiten Vorlage in der Definition.
Ich habe, dass „Vorlage Vorlage Struktur ...“ Syntax gesehen zu kompilieren, aber ich habe noch nie bekannt, was es bedeutet oder warum es legale Syntax ist. Was bedeutet es (wenn "Template" zweimal vor einer solchen Struktur erwähnt wird)? –
Dennis
@Dennis: Es wird für die Definition von verschachtelten Vorlagen außerhalb der umschließenden Vorlage benötigt, siehe z.B. [hier] (http://www.comeaucomputing.com/techtalk/templates/#outsidedef). –
TA ist ein Template-Argument von A, und TAB ist ein Template-Argument von A :: B – f0b0s