Przekazuję mój kod C++ (msvc & intel) do Linuksa (g ++). Kod używa wielu szablonów (lubię metaprogramowanie ;-). Ale nie mogę skompilować ten kod:g ++ Problem szablonu
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 ++ mówi mi, że w definicji A :: B, C klasa ma nieprawidłowe argumenty szablonu. Ale na msvc i intel działa dobrze! Jaki jest problem? PS: Niestety, nie mogę opublikować oryginalnego kodu, ponieważ jest zbyt skomplikowany w stosunku do szablonu. Ale ten przykład jest praktycznie taki sam i daje taki sam błąd w g ++. Dziękuję.
AKTUALIZACJA: Znalazłem problem z argumentem TBA z T. g ++, który nie przypomina użycia drugiego szablonu w definicji.
widziałem, że „szablon szablon struct ...” składni wcześniej, ale nigdy nie wiadomo, co to znaczy lub dlaczego jest to prawna składnia. Co to znaczy (kiedy "szablon" jest wymieniany dwa razy przed taką strukturą)? –
Dennis
@Dennis: Jest potrzebny do definicji zagnieżdżonych szablonów poza szablonem, na przykład [tutaj] (http://www.comeaucomputing.com/techtalk/templates/#outsidedef). –
TA jest argumentem szablonu A, a TAB jest argumentem szablonu A :: B – f0b0s