Commit c31d639e authored by Marc Horowitz's avatar Marc Horowitz Committed by Facebook Github Bot

Fail on implicit convert from BOOL on ObjC in folly::dynamic

Summary: On some platforms (iPhone 5C at least), ObjC/Objc++ BOOL is really signed char.  There is code which expects this to be a boolean when converted to dynamic (and then to JSON and into JS), but the old code treated it as a number.  This makes such code (like [mobileConfig getBool:]) fail to compile, so the developer needs to resolve the ambiguity one way or the other.

Reviewed By: yfeldblum

Differential Revision: D4648133

fbshipit-source-id: 76ece7803a1e966dca08bdb857af7990035544a0
parent f258ec23
......@@ -331,6 +331,12 @@ using namespace FOLLY_GFLAGS_NAMESPACE;
namespace folly {
#if __OBJC__
constexpr auto kIsObjC = true;
#else
constexpr auto kIsObjC = false;
#endif
#if defined(__linux__) && !FOLLY_MOBILE
constexpr auto kIsLinux = true;
#else
......
......@@ -310,6 +310,9 @@ inline dynamic::~dynamic() noexcept { destroy(); }
template <class T>
struct dynamic::NumericTypeHelper<
T, typename std::enable_if<std::is_integral<T>::value>::type> {
static_assert(
!kIsObjC || sizeof(T) > sizeof(char),
"char-sized types are ambiguous in objc; cast to bool or wider type");
using type = int64_t;
};
template <>
......
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