template<int> struct CompileTimeError;
template<> struct CompileTimeError<true> {};
#define STATIC_CHECK(expr,msg) {CompileTimeError< ((expr)!=0) > Error_##msg; (void)Error_##msg; }
template <class To , class From>
To safe_reinterpret_cast(From from)
{
STATIC_CHECK(sizeof(From) <= sizeof(To),Destination_Type_Too_Narrow);
return reinterpret_cast<To>(from);
}
void main()
{
void *p= NULL;
char c= safe_reinterpret_cast<char>(p);
}
当我们尝试将指针转换为 char 时,上面的代码工作正常并给出编译时错误。但它不是很清楚 STATIC_CHECK 宏是如何工作的。
根据上面的代码,它应该导致以下
STATC_CHECK(false,Destination_Type_Too_Narrow)
上面的宏将扩展如下:
CompileTimeError<false>
ERROR_Destination_Type_Too_Narrow;
(void)ERROR_Destination_Type_Too_Narrow;
在上面的宏中,我无法理解这两个语句的含义
ERROR_Destination_Type_Too_Narrow;
(void)ERROR_Destination_Type_Too_Narrow;
如果有人有清楚的了解,请解释