From: Wolfgang Bangerth <bangerth@math.tamu.edu>
Date: Thu, 13 Aug 2015 19:56:33 +0000 (-0500)
Subject: Work around MS Visual Studio.
X-Git-Tag: v8.4.0-rc2~612^2
X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F1354%2Fhead;p=dealii.git

Work around MS Visual Studio.

This should fix #1350 by using a std::function object instead of
calling Threads::new_task() with a bunch of arguments.
---

diff --git a/source/fe/fe_system.cc b/source/fe/fe_system.cc
index 38c7cf98a0..a9ec3d7856 100644
--- a/source/fe/fe_system.cc
+++ b/source/fe/fe_system.cc
@@ -815,11 +815,12 @@ FESystem<dim,spacedim>::get_data (const UpdateFlags      flags_,
   std::vector<Threads::Task<typename FiniteElement<dim,spacedim>::InternalDataBase *> >
   get_data_tasks (this->n_base_elements());
   for (unsigned int base_no=0; base_no<this->n_base_elements(); ++base_no)
-    get_data_tasks[base_no] = Threads::new_task (&FiniteElement<dim,spacedim>::get_data,
-                                                 base_element(base_no),
-                                                 flags,
-                                                 mapping,
-                                                 quadrature);
+    get_data_tasks[base_no] = Threads::new_task (std_cxx11::function<typename FiniteElement<dim,spacedim>::InternalDataBase * ()>
+                                                 (std_cxx11::bind(&FiniteElement<dim,spacedim>::get_data,
+                                                     std_cxx11::cref(base_element(base_no)),
+                                                     std_cxx11::cref(flags),
+                                                     std_cxx11::cref(mapping),
+                                                     std_cxx11::cref(quadrature))));
 
   // then wait for each of these calls to finish in turn and initialize
   // these objects
@@ -865,11 +866,12 @@ FESystem<dim,spacedim>::get_face_data (
   std::vector<Threads::Task<typename FiniteElement<dim,spacedim>::InternalDataBase *> >
   get_data_tasks (this->n_base_elements());
   for (unsigned int base_no=0; base_no<this->n_base_elements(); ++base_no)
-    get_data_tasks[base_no] = Threads::new_task (&FiniteElement<dim,spacedim>::get_face_data,
-                                                 base_element(base_no),
-                                                 flags,
-                                                 mapping,
-                                                 quadrature);
+    get_data_tasks[base_no] = Threads::new_task (std_cxx11::function<typename FiniteElement<dim,spacedim>::InternalDataBase * ()>
+                                                 (std_cxx11::bind(&FiniteElement<dim,spacedim>::get_face_data,
+                                                     std_cxx11::cref(base_element(base_no)),
+                                                     std_cxx11::cref(flags),
+                                                     std_cxx11::cref(mapping),
+                                                     std_cxx11::cref(quadrature))));
 
   // then wait for each of these calls to finish in turn and initialize
   // these objects
@@ -917,11 +919,12 @@ FESystem<dim,spacedim>::get_subface_data (
   std::vector<Threads::Task<typename FiniteElement<dim,spacedim>::InternalDataBase *> >
   get_data_tasks (this->n_base_elements());
   for (unsigned int base_no=0; base_no<this->n_base_elements(); ++base_no)
-    get_data_tasks[base_no] = Threads::new_task (&FiniteElement<dim,spacedim>::get_subface_data,
-                                                 base_element(base_no),
-                                                 flags,
-                                                 mapping,
-                                                 quadrature);
+    get_data_tasks[base_no] = Threads::new_task (std_cxx11::function<typename FiniteElement<dim,spacedim>::InternalDataBase * ()>
+                                                 (std_cxx11::bind(&FiniteElement<dim,spacedim>::get_subface_data,
+                                                     std_cxx11::cref(base_element(base_no)),
+                                                     std_cxx11::cref(flags),
+                                                     std_cxx11::cref(mapping),
+                                                     std_cxx11::cref(quadrature))));
 
   // then wait for each of these calls to finish in turn and initialize
   // these objects