Commit 541d1209 authored by Yedidya Feldblum's avatar Yedidya Feldblum Committed by facebook-github-bot-9

Drop support for GCC < 4.8 in folly/Conv.h

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
parent 26164748
......@@ -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
......
......@@ -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")));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment