[gcc][bug?] объясните ошибку "a class-key must be used..."
От: Alexander G Украина  
Дата: 22.12.09 16:17
Оценка: 1 (1)
#include <stdio.h>

template<typename T>
class Base 
{
public:
  void BaseMethod()
  {
    static_cast<T*>(this)->DerivedMethod2();
  }
};

class Derived : private Base<Derived>
{
public:
  void DerivedMethod1()
  {
    BaseMethod();
  }

  void DerivedMethod2()
  {
    printf("here\n");
  }

private:
  friend Base<Derived>; //Line 27: error: a class-key must be used when declaring a friend
};

int main()
{
  Derived d;
  d.DerivedMethod1();
}


(на codepad.org)
Русский военный корабль идёт ко дну!
Re: [gcc][bug?] объясните ошибку "a class-key must be used..
От: ArtDenis Россия  
Дата: 22.12.09 16:35
Оценка: 16 (1)
Ну если ты хочешь, чтобы все ф-ции другого класса были друзьями, то надо писать friend class имя_класса:
friend class Base<Derived>;

Причём не обязательно в секции private
... << RSDN@Home 1.2.0 alpha 4 rev. 1324>>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[2]: Тогда баг в Comeau, VC8, VC9 ?
От: Alexander G Украина  
Дата: 22.12.09 17:05
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Ну если ты хочешь, чтобы все ф-ции другого класса были друзьями, то надо писать friend class имя_класса:

AD>
AD>friend class Base<Derived>;
AD>


Интересно, а VC8, VC9 и Comeau online компилируют. Получается, в них баг?


AD>Причём не обязательно в секции private


Так просто воспринимается лучше.
Русский военный корабль идёт ко дну!
Re[3]: Тогда баг в Comeau, VC8, VC9 ?
От: Николай Ивченков  
Дата: 22.12.09 18:25
Оценка: 16 (1)
См. C++03 — 11.4/2, 7.1.5.3/1. По правилам C++0x такой код корректен — см. N3000 — 11.4/3. Я бы привёл цитаты, но глючный форум не позволяет мне отправлять длинные посты.
Re[3]: Тогда баг в Comeau, VC8, VC9 ?
От: Николай Ивченков  
Дата: 22.12.09 18:25
Оценка: 8 (1)
В Comeau ты можешь выставить опцию "Disable C++0x extensions" и сравнить результат.
Re[4]: Тогда баг в Comeau, VC8, VC9 ?
От: Кодт Россия  
Дата: 23.12.09 09:33
Оценка: +1
Здравствуйте, Николай Ивченков, Вы писали:

НИ>См. C++03 — 11.4/2, 7.1.5.3/1. По правилам C++0x такой код корректен — см. N3000 — 11.4/3. Я бы привёл цитаты, но глючный форум не позволяет мне отправлять длинные посты.


Ты что, весь текст стандарта хотел процитировать?
Никогда ещё не возникало проблем с цитатами.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.