Drop support for GCC < 4.8 in folly/Conv.h
authorYedidya Feldblum <yfeldblum@fb.com>
Wed, 9 Sep 2015 01:48:54 +0000 (18:48 -0700)
committerfacebook-github-bot-9 <folly-bot@fb.com>
Wed, 9 Sep 2015 02:20:16 +0000 (19:20 -0700)
Summary: [Folly] Drop support for GCC < 4.8 in folly/Conv.h.

Can't stay indefinitely backcompat with older compilers.

Reviewed By: @Gownta, @JoelMarcey

Differential Revision: D2422369

folly/Conv.h
folly/test/ConvTest.cpp

index 8dd466ae4a4dd3c4bd0f8d2f9831be228b5de925..113a14954ae27ad56d60f3de46ecbf41f4016268 100644 (file)
@@ -547,9 +547,6 @@ estimateSpaceNeeded(Src value) {
   return estimateSpaceNeeded(static_cast<Intermediate>(value));
 }
 
-#if defined(__clang__) || __GNUC_PREREQ(4, 7)
-// std::underlying_type became available by gcc 4.7.0
-
 /**
  * Enumerated values get appended as integers.
  */
@@ -569,51 +566,6 @@ estimateSpaceNeeded(Src value) {
       static_cast<typename std::underlying_type<Src>::type>(value));
 }
 
-#else
-
-/**
- * Enumerated values get appended as integers.
- */
-template <class Tgt, class Src>
-typename std::enable_if<
-  std::is_enum<Src>::value && IsSomeString<Tgt>::value>::type
-toAppend(Src value, Tgt * result) {
-  /* static */ if (Src(-1) < 0) {
-    /* static */ if (sizeof(Src) <= sizeof(int)) {
-      toAppend(static_cast<int>(value), result);
-    } else {
-      toAppend(static_cast<long>(value), result);
-    }
-  } else {
-    /* static */ if (sizeof(Src) <= sizeof(int)) {
-      toAppend(static_cast<unsigned int>(value), result);
-    } else {
-      toAppend(static_cast<unsigned long>(value), result);
-    }
-  }
-}
-
-template <class Src>
-typename std::enable_if<
-  std::is_enum<Src>::value, size_t>::type
-estimateSpaceNeeded(Src value) {
-  /* static */ if (Src(-1) < 0) {
-    /* static */ if (sizeof(Src) <= sizeof(int)) {
-      return estimateSpaceNeeded(static_cast<int>(value));
-    } else {
-      return estimateSpaceNeeded(static_cast<long>(value));
-    }
-  } else {
-    /* static */ if (sizeof(Src) <= sizeof(int)) {
-      return estimateSpaceNeeded(static_cast<unsigned int>(value));
-    } else {
-      return estimateSpaceNeeded(static_cast<unsigned long>(value));
-    }
-  }
-}
-
-#endif // gcc 4.7 onwards
-
 /*******************************************************************************
  * Conversions from floating-point types to string types.
  ******************************************************************************/
@@ -1477,9 +1429,6 @@ to(const Src & value) {
  * Enum to anything and back
  ******************************************************************************/
 
-#if defined(__clang__) || __GNUC_PREREQ(4, 7)
-// std::underlying_type became available by gcc 4.7.0
-
 template <class Tgt, class Src>
 typename std::enable_if<
   std::is_enum<Src>::value && !std::is_same<Src, Tgt>::value, Tgt>::type
@@ -1494,48 +1443,6 @@ to(const Src & value) {
   return static_cast<Tgt>(to<typename std::underlying_type<Tgt>::type>(value));
 }
 
-#else
-
-template <class Tgt, class Src>
-typename std::enable_if<
-  std::is_enum<Src>::value && !std::is_same<Src, Tgt>::value, Tgt>::type
-to(const Src & value) {
-  /* static */ if (Src(-1) < 0) {
-    /* static */ if (sizeof(Src) <= sizeof(int)) {
-      return to<Tgt>(static_cast<int>(value));
-    } else {
-      return to<Tgt>(static_cast<long>(value));
-    }
-  } else {
-    /* static */ if (sizeof(Src) <= sizeof(int)) {
-      return to<Tgt>(static_cast<unsigned int>(value));
-    } else {
-      return to<Tgt>(static_cast<unsigned long>(value));
-    }
-  }
-}
-
-template <class Tgt, class Src>
-typename std::enable_if<
-  std::is_enum<Tgt>::value && !std::is_same<Src, Tgt>::value, Tgt>::type
-to(const Src & value) {
-  /* static */ if (Tgt(-1) < 0) {
-    /* static */ if (sizeof(Tgt) <= sizeof(int)) {
-      return static_cast<Tgt>(to<int>(value));
-    } else {
-      return static_cast<Tgt>(to<long>(value));
-    }
-  } else {
-    /* static */ if (sizeof(Tgt) <= sizeof(int)) {
-      return static_cast<Tgt>(to<unsigned int>(value));
-    } else {
-      return static_cast<Tgt>(to<unsigned long>(value));
-    }
-  }
-}
-
-#endif // gcc 4.7 onwards
-
 } // namespace folly
 
 // FOLLY_CONV_INTERNAL is defined by Conv.cpp.  Keep the FOLLY_RANGE_CHECK
index bf4c68ddf95813e0369d86d4d927b81de17888a0..189c96bd0b5811199205fc747f086fddb86cc223 100644 (file)
@@ -699,9 +699,6 @@ TEST(Conv, UnsignedEnum) {
   }
 }
 
-#if defined(__clang__) || __GNUC_PREREQ(4, 7)
-// to<enum class> and to(enum class) only supported in gcc 4.7 onwards
-
 TEST(Conv, UnsignedEnumClass) {
   enum class E : uint32_t { x = 3000000000U };
   auto u = to<uint32_t>(E::x);
@@ -728,8 +725,6 @@ TEST(Conv, EnumClassToString) {
   EXPECT_EQ("foo.65", to<string>("foo.", A::z));
 }
 
-#endif // gcc 4.7 onwards
-
 template<typename Src>
 void testStr2Bool() {
   EXPECT_FALSE(to<bool>(Src("0")));