Привет всем программистам и им сочуствующим.
Я тут сам
кое что протестировал на таком примере.
class C1
{
public:
C1(): m_Int(100),m_Char("OK")
{
}
virtual ~C1()
{
}
template<class T> operator T ()
{
T* res=NULL;
if(typeid(T)==typeid(int))
res=(T*)&m_Int;
else
if(typeid(T)==typeid(char*))
res=(T*)&m_Char;
if(res==NULL) throw "Error type cast";
return *res;
}
protected:
int m_Int;
char* m_Char;
};
class C2
{
public:
C2()
{
C1 c1;
int r=c1;
char* d1=c1;
try
{
double g=c1;
}
catch(char* err)
{
::MessageBox(NULL,err,"ERROR!",0);
}
}
~C2()
{
}
} c2;
и, вот какие резульраты я получил:
/ RTTI была во всех тестах была включена /
--VC6--
Компилятор пропустил эту конструкцию, но при выполнении кода дебагер не заходит в тело оператора и, валится с ошибкой.
--VC7--
Компилятор не пропускает такой код вообще.
--C++Builder 5--
Тут, как ни странно, все работает корректно !!?
p/s
С точки зрения синтаксиса C++ тут все правильно -- все дело в реализации !
Спасибо всем, кто пытался ответить на этот вопрос.