我自己想出了這個解決方案。我現在只關心整數,但是更通用的解決方案將不勝感激。任何反饋?謝謝。
#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