我自己想出了这个解决方案。我现在只关心整数,但是更通用的解决方案将不胜感激。任何反馈?谢谢。
#include <limits>
using namespace std;
typedef unsigned long long UINT64;
typedef unsigned long long UINT_64;
typedef unsigned int UINT_32;
typedef unsigned long int UINT32;
template<bool> struct static_assert;
template<> struct static_assert<true> {};
#define CHECK_INTEGER_TYPES(T, U) (numeric_limits<T>::is_specialized && numeric_limits<U>::is_specialized && numeric_limits<T>::is_integer && numeric_limits<U>::is_integer && (numeric_limits<T>::is_signed == numeric_limits<U>::is_signed) && (numeric_limits<T>::digits == numeric_limits<U>::digits))
int main()
{
static_assert<(CHECK_INTEGER_TYPES(UINT64, UINT_64))>(); // pass
static_assert<CHECK_INTEGER_TYPES(UINT64, UINT64)>(); // pass
static_assert<CHECK_INTEGER_TYPES(UINT64, UINT_32)>(); // fail
static_assert<CHECK_INTEGER_TYPES(UINT32, UINT32)>(); // pass
static_assert<CHECK_INTEGER_TYPES(UINT32, UINT_32)>(); // pass
}
-1 - >您已经问过这个问题 - http://stackoverflow.com/questions/15200516/compare-typedef-is-same-type – 2013-03-04 13:49:36
不,我没有。阅读第一个答案的评论。 – 2013-03-04 13:55:30
@Ed这不是同一个问题。即使两者都是64位有符号的,is_same也会在很长很长的时间内返回false。 – us2012 2013-03-04 13:56:54