в общем используя шестой билдер откомпилилровал следующее
class ScadaInterOperation
{
protected:
virtual void SetSchema(ScadaSchema *schema);
public:
ScadaInterOperation();
virtual ~ScadaInterOperation();
... // не важно что
};
class ComplexOperation:public ScadaInterOperation
{
vector<ScadaInterOperation *> operations;
virtual void SetSchema(ScadaSchema *schema);
public:
ComplexOperation(){};
~ComplexOperation();
void Add(ScadaInterOperation *);
};
// внимание, фокус!
void ComplexOperation::SetSchema(ScadaSchema *schema)
{
ScadaInterOperation::SetSchema(schema);
for_each(operations.begin(),operations.end(), Mem_Fun1(& ScadaInterOperation::SetSchema,schema));// ну не использую я буст
}
Таким образом, мне дали указатель на метод класса, который вообще то protected! заметим что
(*operations.begin())->SetSchema(schema)
очевидно работать не будет! получается что защиту так легко обойти или билдер косячит?