gcc 4.3.4 - вызов приватного метода
От: dad  
Дата: 19.08.09 16:17
Оценка:
Случайно наткнулся на то, что можно сделать так:

#include <iostream>

class  my
{

  void show()
  {
    std::cout << "show" << std::endl;
  }

};


template<class Type,void (Type::*Mem1)()  >
struct call
{
  static void doit(Type*p)
  {
    (p->*Mem1)();
  }
};



int main()
{
  call<my, &my::show>::doit( new my() );  
}


Не проверял нигде больше
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
Re: gcc 4.3.4 - вызов приватного метода
От: Lorenzo_LAMAS  
Дата: 19.08.09 16:21
Оценка:
а чего проверять-то. &my::show должен привести к ошибке.
Of course, the code must be complete enough to compile and link.
Re[2]: gcc 4.3.4 - вызов приватного метода
От: Lorenzo_LAMAS  
Дата: 19.08.09 16:27
Оценка:
L_L>а чего проверять-то. &my::show должен привести к ошибке.
интересно, что без инстанцирования шаблонов выражение &my::show приводит к ошибке в гцц
Of course, the code must be complete enough to compile and link.
Re[3]: gcc 4.3.4 - вызов приватного метода
От: dad  
Дата: 19.08.09 18:48
Оценка:
и конструктор/деструктор тоже отлавливает. можно только метод вызвать.
ценность информации незначительна — просто любопытный баг. можно
либы хачить , например.

насчет проверки — я имел ввиду не проверял на каких версиях g++ —
да и не за чем.
Веру-ю-у! В авиацию, в научную революци-ю-у, в механизацию сельского хозяйства, в космос и невесомость! Веру-ю-у! Ибо это объективно-о! (Шукшин)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.