GCC vs. вложенные шаблоны · Заметки

Представляете, GCC не умеет компилировать вот такую элементарщину:

template<class A, int B> class ClassOne:
        public ClassTwo<A, B, ClassThree<A, B>>
{
        ...
};

Видимо, он пытается развернуть ClassThree<A, B>, ещё не зная значения этих A и B. Вот если ClassThree можно задать для конкретных A и B, то его ещё можно уговорить, соорудив что-то типа typedef ClassThreeF2 ClassThree<float, 2> и потом подсунуть этот ClassThreeF2 в объявление ClassOne.
А вот MSC'2005 жуёт такой код за милую душу.
Придётся ради совместимости с GCC переписывать кучу кода на динамическую линковку и виртуальные функции.




Comments:

Comment from: user1 [Visitor]
Там точно угловыя скобочки не склеились? А то ведь за ним вправо подвигать (и обломаться ) не заржавеет - аргумент 2 инвалид и все. У мене 3.4.5 из мингва вполне себе компилит и чего-то пишет.

template class ClassTwo
{
public:
ClassTwo(){printf("bork\n");}
};

template class ClassThree
{
};

template class ClassOne:
public ClassTwo
{

};


ClassOne boo;
Permalink 08/24/08 @ 03:22
Comment from: S.A.G.e [Member]
К сожалению, что было в угловых скобочках, не запостилось, поэтому мысль не понятна. &lt;...&gt; должно работать.
Permalink 08/24/08 @ 04:26
Comment from: S.A.G.e [Member]
Тест: <...>
Permalink 08/24/08 @ 04:26
Comment from: S.A.G.e [Member]
Мне ещё советовали попробовать пометить параметры шаблона typename, но я пока забил на этой теме и так и не сделал до сих пор.
Permalink 08/24/08 @ 04:28

Leave a comment:

Your email address will not be displayed on this site.
Your URL will not be displayed on this site. Comments containing URL's of non-personal pages may be removed.
Confirmation Code:
Human Confirmation Code (Captcha)

HTML tags and "<", ">" symbols are not allowed. Links will not be converted to hyperlinks. Any commercials are removed and reported as abuse.

Archives

                                                                                                                                                                                                                                                                   


© Sergey A. Galin, 1998-2021 sageshome.net/blog/