// alt_cast.h definitions for assert_cast (workarounds for
// certain compilers)
#ifndef CAST_H_A2434B93
#define CAST_H_A2434B93
#include <assert.h>
// declare general version
template<typename Result>
class assert_cast;
// define specialization for pointers
template<typename Result>
class assert_cast<Result*>
{
public:
template<typename Source>
assert_cast(Source* pSource)
: m_pResult( static_cast<Result*>(pSource) )
{
assert ( m_pResult ==
dynamic_cast<Result*>(pSource) );
}
operator Result*() const { return m_pResult; }
private:
Result* m_pResult;
};
// define specialization for references
template<typename Result>
class assert_cast<Result&>
{
public:
template<typename Source>
assert_cast(Source& rSource)
: m_rResult( static_cast<Result&>(rSource) )
{
assert( &m_rResult );
assert( &m_rResult ==
dynamic_cast<Result*>(&rSource) );
}
operator Result&() const { return m_rResult; }
private:
Result& m_rResult;
};
#endif // CAST_H_A2434B93