From a3a0759272ccc301aef66730462e9ad36256f6b7 Mon Sep 17 00:00:00 2001
From: Daniel Arndt <daniel.arndt@iwr.uni-heidelberg.de>
Date: Sat, 16 Jun 2018 23:02:29 +0200
Subject: [PATCH] Move preprocessor check and add comments

---
 include/deal.II/fe/fe_system.h | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/include/deal.II/fe/fe_system.h b/include/deal.II/fe/fe_system.h
index 2cc5bc2d77..2fe9ea45d4 100644
--- a/include/deal.II/fe/fe_system.h
+++ b/include/deal.II/fe/fe_system.h
@@ -423,6 +423,7 @@ public:
   FESystem (const std::vector<const FiniteElement<dim,spacedim>*> &fes,
             const std::vector<unsigned int>                   &multiplicities);
 
+#if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900
   /**
    * Constructor taking an arbitrary number of parameters of type
    * <code>std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int></code>.
@@ -461,10 +462,10 @@ public:
    * would have expected).
    *
    * @warning This feature is not available for Intel compilers
-   * prior to version 19.0
+   * prior to version 19.0. Defining this
+   * constructor leads to internal compiler errors for Intel compilers prior
+   * to 18.0.
    */
-  FESystem (FEPairs &&... fe_pairs);
-#  if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900
   template <
     class... FEPairs,
     typename = typename enable_if_all<
@@ -484,12 +485,14 @@ public:
    * @endcode
    *
    * @warning This feature is not available for Intel compilers
-   * prior to version 19.0
+   * prior to version 19.0. The constructor is just not selected for overload
+   * resolution.
    */
   FESystem(
     const std::initializer_list<
     std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>, unsigned int>>
     &fe_systems);
+#endif
 
   /**
    * Copy constructor. This constructor is deleted, i.e., copying
@@ -1216,7 +1219,7 @@ namespace
 
 
 
-#    if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900
+#if !defined(__INTEL_COMPILER) || __INTEL_COMPILER >= 1900
 // We are just forwarding/delegating to the constructor taking a
 // std::initializer_list. If we decide to remove the deprecated constructors, we
 // might just use the variadic constructor with a suitable static_assert instead
@@ -1260,7 +1263,7 @@ FESystem<dim,spacedim>::FESystem
 
   initialize(fes, multiplicities);
 }
-#    endif
+#endif
 
 #endif //DOXYGEN
 
-- 
2.39.5