Re: С++ builder 5 - "Illegal base class type" error
От: lst Россия  
Дата: 05.10.04 04:54
Оценка: 12 (1) :)
Здравствуйте, Andrew S, Вы писали:

Бред, конечно, но вот так работает:

template <class R>
struct fi
{
    template <class D, class P1> struct RetProxy
    {
    };
};

template <class R, class P1>
struct ff
{
    template <class D> struct Proxy: public fi<R>::template RetProxy<class D,P1>
    {
    };
};

int main()
{
    ff<int, int>::Proxy<int> gg; // E2402 Illegal base class type: formal type 'fi<R>::RetProxy<D,P1>' 
                                 // resolves to 'fi<R>::RetProxy<D,int>'

    return 0;
}
С++ builder 5 - "Illegal base class type" error
От: Andrew S Россия http://alchemy-lab.com
Дата: 04.10.04 13:10
Оценка: 1 (1)
Господа, всем добрый день. Может кто знает, как убедить С++ builder 5 в том, что этот код должен компилироваться? На comeau и линейке VC он работает вполне нормально, а вот билдер категорически отказывается инстанцировать это:

template <class R>
struct fi
{
    template <class D, class P1> struct RetProxy
    {
    };
};

template <class R, class P1>
struct ff
{
    template <class D> struct Proxy: public fi<R>::template RetProxy<D,P1>
    {
    };
};

int main()
{
    ff<int, int>::Proxy<int> gg; // E2402 Illegal base class type: formal type 'fi<R>::RetProxy<D,P1>' 
                                 // resolves to 'fi<R>::RetProxy<D,int>'

    return 0;
}


Опыта работы и знания особенностей данного недокомпилятора у меня нет, поэтому если все просто — просьба сильно не пинать... Заранее спасибо!
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: С++ builder 5 - "Illegal base class type" error
От: Andrew S Россия http://alchemy-lab.com
Дата: 05.10.04 06:55
Оценка:
lst>Бред, конечно, но вот так работает:

[skipped]

Спасибо, буду знать, как бороть. Хотя действительно, это не других компиляторах не работает, поэтому полезно только для билдера. Впрочем, и полезность тоже теперь вызывает сомнения — все эти пляски затеяны потому, что VC6 не может возвращать void из функций (return void), в билдере же такой проблемы нет. Видимо, придется таки делать 2 разных функционала — обычный и для "ущербных" компиляторов.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[3]: С++ builder 5 - "Illegal base class type" error
От: Andrew S Россия http://alchemy-lab.com
Дата: 05.10.04 07:40
Оценка:
Здравствуйте, Andrew S, Вы писали:

lst>>Бред, конечно, но вот так работает:


AS>[skipped]


А хотя, похоже, это не то...
Например, на такой код:

template <class R>
struct fi
{
    template <class D, class P1> struct RetProxy
    {
    };
};

template <class R, class P1>
struct ff
{
    template <class D> struct Proxy: public fi<R>::template RetProxy<class D,P1>
    {
    };
};

template <class R, class P1>
struct ff1
{
    template <class D> struct Proxy: public fi<R>::template RetProxy<class D,P1>
    {
    };
};

он ругается "Multiple declaration for D". Похоже, он считает это все объявлением класса D... Круто.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[4]: С++ builder 5 - "Illegal base class type" error
От: lst Россия  
Дата: 05.10.04 12:55
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>Здравствуйте, Andrew S, Вы писали:


AS> Похоже, он считает это все объявлением класса D... Круто.


Похоже на то
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.