Fix a folly build failure under clang: FutexTest.cpp.
authorYedidya Feldblum <yfeldblum@fb.com>
Mon, 21 Jul 2014 21:10:43 +0000 (14:10 -0700)
committerChip Turner <chip@fb.com>
Fri, 25 Jul 2014 16:06:13 +0000 (09:06 -0700)
Summary:
[Folly] Fix a folly build failure under clang: FutexTest.cpp.

In clang-v3.4, there is a bug with the combination of a lambda expression inside a function template taking a template name (rather than a type name) as a template argument.

This diff, in the interest of building folly under clang-v3.4, extracts the lambda expression into a separate function so that the function template taking a template name as a template argument no longer has a lambda expression in it.

Test Plan: Build folly/test/FutexTest.cpp under clang.

Reviewed By: njormrod@fb.com

Subscribers: mathieubaudet, dougw

FB internal diff: D1446237

Tasks: 4723132

folly/test/FutexTest.cpp

index eff4d14b5de15afb8db31f4b0fe98ea6f6d658bf..d920b1e7323f5a0167c940e84182588ca7c1929e 100644 (file)
@@ -18,6 +18,7 @@
 #include <folly/test/DeterministicSchedule.h>
 
 #include <chrono>
+#include <functional>
 #include <thread>
 
 #include <gflags/gflags.h>
@@ -31,6 +32,12 @@ using namespace std::chrono;
 
 typedef DeterministicSchedule DSched;
 
+template <template<typename> class Atom>
+void run_basic_thread(
+    Futex<Atom>& f) {
+  EXPECT_TRUE(f.futexWait(0));
+}
+
 template <template<typename> class Atom>
 void run_basic_tests() {
   Futex<Atom> f(0);
@@ -38,9 +45,7 @@ void run_basic_tests() {
   EXPECT_FALSE(f.futexWait(1));
   EXPECT_EQ(f.futexWake(), 0);
 
-  auto thr = DSched::thread([&]{
-    EXPECT_TRUE(f.futexWait(0));
-  });
+  auto thr = DSched::thread(std::bind(run_basic_thread<Atom>, std::ref(f)));
 
   while (f.futexWake() != 1) {
     std::this_thread::yield();