или зарядко для мозгов.
Нарвался на распространенную ошибку, но в интересной обертке.
Предыстория. Есть проект, который писался на билдере, сейчас пишется на студии (ну и просто стараемся сделать достаточно переносимым). Есть структура размер которой, добавляя поля, менять нельзя, поэтому cделали такой костыль
#define DECLARE_PROPERTY_PROXY_ACESS(PropertyBase,Type, fnRead, fnWrite, Name)\
struct Property_##Name:public PropertyBase(Type)\
{\
__inline Property_##Name(PropertyHolder* parent):\
m_parent(parent)\
{\
;\
}\
__inline Type operator = (Type val)\
{\
m_parent->fnWrite(val);\
return m_parent->fnRead();\
}\
__inline operator Type()\
{\
return m_parent->fnRead();\
}\
private:\
PropertyHolder* m_parent;\
};
т.е. структурко принимает на вход указатель на класс, делает с ним какие-то операции, и мимикрирует под нужный результат.
следующий код, по понятным причинам, вызывает падение (prev->Right() возвращает структуру подобную верхней)
currentRange.first = prev != NULL ? prev->Right() : 0;
Внимание вопрос: почему
З.ы. сегодня мне чуть не набили мордо, почувствовал себя автором "счастливой отладки".