以下のコードでは、boolean_cast の TDestination にキャストして、コンパイラの警告 (「VARIANT_BOOL」から「bool」への切り捨て) を回避する必要があります。これはコンパイラの問題ですか、それとも C++ の問題ですか?
template<typename TDestination, typename TSource>
TDestination boolean_cast(TSource source)
{
TDestination destination;
static_assert(std::is_same<TDestination, bool>::value || std::is_same<TDestination, VARIANT_BOOL>::value, "destination must be bool or VARIANT_BOOL");
//convert to bool
if (std::is_same<TDestination, bool>::value)
{
if (source)
destination = true;
else
destination = false;
}
//convert to VARIANT_BOOL
else
{
if (source)
destination = (TDestination)VARIANT_TRUE;
else
destination = (TDestination)VARIANT_FALSE;
}
return destination;
}