Re: GCC "using" bug?
От: Raven_ua  
Дата: 01.03.03 22:02
Оценка:
Здравствуйте, comer, Вы писали:

C>Пытаюсь использовать using для шаблонной функции.

C>Такой вот пример:
C>
C>struct A
C>{
C>    template<class R>
C>    void F(R)
C>    { // строка 5
C>    }
C>};

C>struct B: private A
C>{
C>    using A::F; // строка 11
C>};

C>int main()
C>{
C>    B b;
C>    b.F(3); // строка 17
C>    return 0;
C>}
C>


C>VC 6 и Comeau скомпилировали нормально. А вот gcc version 3.2 20020818 (prerelease), выдал сообщение:


C>
C>...: In function `int main()':
C>...:5: `void A::F(R) [with R = int]' is inaccessible
C>...:17: within this context
C>


C>Самое печальное то что ошибку он выдал в строке 17. А не в строке 11, что было бы логичнго если GCC не может использовать using директиву для шаблонных функций , заметьте, других функции F больше нет в классе A.


Здравствуйте comer.
В вашем примере используется using-объявление, а не using-директива. Using-директива это, например, using namespace или using <namespace>::member.

using-объявление не может использоваться для получения доступа к дополнительной информации.
Оно просто является механизмом предоставления более удобного доступа к информации, доступ к которой в принципе разрешен.
Б. Страуструп
Так, что в вашем примере нет ошибок и долгожданного «исправления» вы вряд ли дождетесь.

P.S. Работа вашего кода в VC++ остается на совести программистов Microsoft-а.
В Builder C++ 6.0 этот код не работает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.