如何在编译时测试常量是否适合某种类型?

sha*_*oth 3 c++ portability visual-c++

我想将编译时断言添加到以下C++代码中(使用Visual C++ 9编译):

//assumes typedef unsigned char BYTE;
int value = ...;
// Does it fit into BYTE?
if( 0 <= value && value <= UCHAR_MAX ) {
    BYTE asByte = static_cast<BYTE>( value );
    //proceed with byte
} else {
    //proceed with greater values
}
Run Code Online (Sandbox Code Playgroud)

问题是UCHAR_MAX并且BYTE是独立typedef的,当移植此代码时,它们可能会失去同步而代码将会中断.所以我想做这样的事情:

compileTimeAssert( sizeof( BYTE ) == sizeof( UCHAR_MAX ) );
Run Code Online (Sandbox Code Playgroud)

但VC++ 9在编译时会产生"负下标"错误 - sizeof( UCHAR_MAX )恰好是4,而不是1.

如何实现我想要的编译时检查?

ust*_*sta 5

比较'value'与std :: numeric_limits <BYTE> :: max()而不是UCHAR_MAX