Some internal projects include wtf headers and build with C++11
authorkeith_miller@apple.com <keith_miller@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 26 Oct 2018 08:25:43 +0000 (08:25 +0000)
committerkeith_miller@apple.com <keith_miller@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 26 Oct 2018 08:25:43 +0000 (08:25 +0000)
https://bugs.webkit.org/show_bug.cgi?id=190791

Reviewed by Alexey Proskuryakov.

C++11 doesn't support constexpr functions that contain
statements. This patch removes getLSBSet set from builds before
C++14 to avoid this for now.

* wtf/MathExtras.h:
(getLSBSet):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@237448 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WTF/ChangeLog
Source/WTF/wtf/MathExtras.h

index cd53b6a..876e5a6 100644 (file)
@@ -1,3 +1,17 @@
+2018-10-26  Keith Miller  <keith_miller@apple.com>
+
+        Some internal projects include wtf headers and build with C++11
+        https://bugs.webkit.org/show_bug.cgi?id=190791
+
+        Reviewed by Alexey Proskuryakov.
+
+        C++11 doesn't support constexpr functions that contain
+        statements. This patch removes getLSBSet set from builds before
+        C++14 to avoid this for now.
+
+        * wtf/MathExtras.h:
+        (getLSBSet):
+
 2018-10-25  Ross Kirsling  <ross.kirsling@sony.com>
 
         Cleanup: inline constexpr is redundant as constexpr implies inline
index 096843b..5eef198 100644 (file)
@@ -206,6 +206,9 @@ template<typename T> constexpr bool hasTwoOrMoreBitsSet(T value)
     return !hasZeroOrOneBitsSet(value);
 }
 
+// FIXME: Some Darwin projects shamelessly include WTF headers and don't build with C++14... See: rdar://problem/45395767
+// Since C++11 and before don't support constexpr statements we can't mark this function constexpr.
+#if !defined(WTF_CPP_STD_VER) || WTF_CPP_STD_VER >= 14
 template <typename T> constexpr unsigned getLSBSet(T value)
 {
     typedef typename std::make_unsigned<T>::type UnsignedT;
@@ -217,6 +220,7 @@ template <typename T> constexpr unsigned getLSBSet(T value)
 
     return result;
 }
+#endif
 
 template<typename T> inline T divideRoundedUp(T a, T b)
 {