3項演算子でスライシング?


class A
{
public:
A()
{
}
virtual ~A()
{
}
void f( A& )
{
}
};

class B:public A
{
public:
B()
{
}
~B()
{
}
void g()
{
A* pa=0;
//スライシング?~A()がこの後よばれたり・・
f( (pa) ? (*pa) : (*this) );
}
};


int main(int argc, _TCHAR* argv[])
{
B b;
b.g();

return 0;
}

ちなみにg()を


void g()
{
//略...
std::cout << typeid( (pa)?(*pa):(*this) ).name() << std::endl;
//std::cout << typeid( (!pa)?((void*)0):(*pa) ).name() << std::endl;
}
にしてみると上が「class A」
下は「error C2446: ':' : 'A' 型から 'void *' 型への変換ができません。」でコンパイルエラー
やっぱキャストしてるみたいだ。知らなかったコワー
やってないけどstatic_cast(*this)なら平気かなぁ・・