From 296ec41e1648efe981a30043b4a7f23590d8a828 Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Mon, 19 Aug 2013 11:57:33 -0700 Subject: BUILDFIX: abstracted decltype into macro LLTYPEOF for temporary gcc 4.1/4.2 support --- indra/llcommon/llpreprocessor.h | 7 ++++ indra/llcommon/llunit.h | 88 ++++++++++++++++++++--------------------- 2 files changed, 51 insertions(+), 44 deletions(-) (limited to 'indra/llcommon') diff --git a/indra/llcommon/llpreprocessor.h b/indra/llcommon/llpreprocessor.h index 7fdb537ab5..a764a42fca 100755 --- a/indra/llcommon/llpreprocessor.h +++ b/indra/llcommon/llpreprocessor.h @@ -181,4 +181,11 @@ # define LL_COMMON_API #endif // LL_COMMON_LINK_SHARED +#if LL_WINDOWS +#define LLTYPEOF(exp) decltype(exp) +#elif LL_LINUX +#define LLTYPEOF(exp) typeof(exp) +#elif LL_DARWIN +#define LLTYPEOF(exp) typeof(exp) +#endif #endif // not LL_LINDEN_PREPROCESSOR_H diff --git a/indra/llcommon/llunit.h b/indra/llcommon/llunit.h index c49c882f23..7a98ce1f45 100644 --- a/indra/llcommon/llunit.h +++ b/indra/llcommon/llunit.h @@ -47,7 +47,7 @@ struct LLIsSameType template struct LLPromotedType { - typedef decltype(S() + T()) type_t; + typedef LLTYPEOF(S() + T()) type_t; }; template @@ -262,9 +262,9 @@ LL_FORCE_INLINE void ll_convert_units(LLUnit in, LLUnit& out, .. // operator + // template -LLUnit operator + (LLUnit first, LLUnit second) +LLUnit operator + (LLUnit first, LLUnit second) { - LLUnit result(first); + LLUnit result(first); result += second; return result; } @@ -284,41 +284,41 @@ LLUnit operator + (UNITLESS first, LLUnit -LLUnitImplicit operator + (LLUnitImplicit first, LLUnitImplicit second) +LLUnitImplicit operator + (LLUnitImplicit first, LLUnitImplicit second) { - LLUnitImplicit result(first); + LLUnitImplicit result(first); result += second; return result; } template -LLUnitImplicit operator + (LLUnit first, LLUnitImplicit second) +LLUnitImplicit operator + (LLUnit first, LLUnitImplicit second) { - LLUnitImplicit result(first); + LLUnitImplicit result(first); result += second; return result; } template -LLUnitImplicit operator + (LLUnitImplicit first, LLUnit second) +LLUnitImplicit operator + (LLUnitImplicit first, LLUnit second) { - LLUnitImplicit result(first); + LLUnitImplicit result(first); result += LLUnitImplicit(second); return result; } template -LLUnitImplicit operator + (LLUnitImplicit first, UNITLESS_TYPE second) +LLUnitImplicit operator + (LLUnitImplicit first, UNITLESS_TYPE second) { - LLUnitImplicit result(first); + LLUnitImplicit result(first); result += second; return result; } template -LLUnitImplicit operator + (UNITLESS_TYPE first, LLUnitImplicit second) +LLUnitImplicit operator + (UNITLESS_TYPE first, LLUnitImplicit second) { - LLUnitImplicit result(first); + LLUnitImplicit result(first); result += second; return result; } @@ -327,9 +327,9 @@ LLUnitImplicit operator + // operator - // template -LLUnit operator - (LLUnit first, LLUnit second) +LLUnit operator - (LLUnit first, LLUnit second) { - LLUnit result(first); + LLUnit result(first); result -= second; return result; } @@ -349,41 +349,41 @@ LLUnit operator - (UNITLESS first, LLUnit -LLUnitImplicit operator - (LLUnitImplicit first, LLUnitImplicit second) +LLUnitImplicit operator - (LLUnitImplicit first, LLUnitImplicit second) { - LLUnitImplicit result(first); + LLUnitImplicit result(first); result -= second; return result; } template -LLUnitImplicit operator - (LLUnit first, LLUnitImplicit second) +LLUnitImplicit operator - (LLUnit first, LLUnitImplicit second) { - LLUnitImplicit result(first); + LLUnitImplicit result(first); result -= second; return result; } template -LLUnitImplicit operator - (LLUnitImplicit first, LLUnit second) +LLUnitImplicit operator - (LLUnitImplicit first, LLUnit second) { - LLUnitImplicit result(first); + LLUnitImplicit result(first); result -= LLUnitImplicit(second); return result; } template -LLUnitImplicit operator - (LLUnitImplicit first, UNITLESS_TYPE second) +LLUnitImplicit operator - (LLUnitImplicit first, UNITLESS_TYPE second) { - LLUnitImplicit result(first); + LLUnitImplicit result(first); result -= second; return result; } template -LLUnitImplicit operator - (UNITLESS_TYPE first, LLUnitImplicit second) +LLUnitImplicit operator - (UNITLESS_TYPE first, LLUnitImplicit second) { - LLUnitImplicit result(first); + LLUnitImplicit result(first); result -= second; return result; } @@ -400,15 +400,15 @@ LLUnit operator * (LLUnit, } template -LLUnit operator * (LLUnit first, UNITLESS_TYPE second) +LLUnit operator * (LLUnit first, UNITLESS_TYPE second) { - return LLUnit(first.value() * second); + return LLUnit(first.value() * second); } template -LLUnit operator * (UNITLESS_TYPE first, LLUnit second) +LLUnit operator * (UNITLESS_TYPE first, LLUnit second) { - return LLUnit(first * second.value()); + return LLUnit(first * second.value()); } template @@ -420,15 +420,15 @@ LLUnitImplicit operator * (LLUnitImplicit -LLUnitImplicit operator * (LLUnitImplicit first, UNITLESS_TYPE second) +LLUnitImplicit operator * (LLUnitImplicit first, UNITLESS_TYPE second) { - return LLUnitImplicit(first.value() * second); + return LLUnitImplicit(first.value() * second); } template -LLUnitImplicit operator * (UNITLESS_TYPE first, LLUnitImplicit second) +LLUnitImplicit operator * (UNITLESS_TYPE first, LLUnitImplicit second) { - return LLUnitImplicit(first * second.value()); + return LLUnitImplicit(first * second.value()); } @@ -437,39 +437,39 @@ LLUnitImplicit operator * // template -LLUnit operator / (LLUnit first, UNITLESS_TYPE second) +LLUnit operator / (LLUnit first, UNITLESS_TYPE second) { - return LLUnit(first.value() / second); + return LLUnit(first.value() / second); } template -decltype(STORAGE_TYPE1() / STORAGE_TYPE2()) operator / (LLUnit first, LLUnit second) +LLTYPEOF(STORAGE_TYPE1() / STORAGE_TYPE2()) operator / (LLUnit first, LLUnit second) { return first.value() / first.convert(second).value(); } template -LLUnitImplicit operator / (LLUnitImplicit first, UNITLESS_TYPE second) +LLUnitImplicit operator / (LLUnitImplicit first, UNITLESS_TYPE second) { - return LLUnitImplicit(first.value() / second); + return LLUnitImplicit(first.value() / second); } template -decltype(STORAGE_TYPE1() / STORAGE_TYPE2()) operator / (LLUnitImplicit first, LLUnitImplicit second) +LLTYPEOF(STORAGE_TYPE1() / STORAGE_TYPE2()) operator / (LLUnitImplicit first, LLUnitImplicit second) { - return (decltype(STORAGE_TYPE1() / STORAGE_TYPE2()))(first.value() / first.convert(second).value()); + return (LLTYPEOF(STORAGE_TYPE1() / STORAGE_TYPE2()))(first.value() / first.convert(second).value()); } template -decltype(STORAGE_TYPE1() / STORAGE_TYPE2()) operator / (LLUnit first, LLUnitImplicit second) +LLTYPEOF(STORAGE_TYPE1() / STORAGE_TYPE2()) operator / (LLUnit first, LLUnitImplicit second) { - return (decltype(STORAGE_TYPE1() / STORAGE_TYPE2()))(first.value() / first.convert(second).value()); + return (LLTYPEOF(STORAGE_TYPE1() / STORAGE_TYPE2()))(first.value() / first.convert(second).value()); } template -decltype(STORAGE_TYPE1() / STORAGE_TYPE2()) operator / (LLUnitImplicit first, LLUnit second) +LLTYPEOF(STORAGE_TYPE1() / STORAGE_TYPE2()) operator / (LLUnitImplicit first, LLUnit second) { - return (decltype(STORAGE_TYPE1() / STORAGE_TYPE2()))(first.value() / first.convert(second).value()); + return (LLTYPEOF(STORAGE_TYPE1() / STORAGE_TYPE2()))(first.value() / first.convert(second).value()); } // -- cgit v1.2.3