operand->type() == typeid(ValueType)
以下の行を に変更する&operand->type() == &typeid(ValueType)
と、コードは引き続き gcc で動作し、実行可能ファイルで占有するスペースが少なくなります (そして、何年も前からそうなっています)。ただし、C++11 標準は、この最適化が全体で機能することを保証しますか?異なるコンパイラ?
template<typename ValueType>
ValueType * any_cast(any * operand)
{
return operand &&
#ifdef BOOST_AUX_ANY_TYPE_ID_NAME
std::strcmp(operand->type().name(), typeid(ValueType).name()) == 0
#else
operand->type() == typeid(ValueType)
#endif
? &static_cast<any::holder<ValueType> *>(operand->content)->held
: 0;
}