From 2a201cad3e3537aea450b0faf6e3dfc18cd12b6c Mon Sep 17 00:00:00 2001
From: Wenqing Wang <wenqing.wang@ufz.de>
Date: Tue, 10 Jan 2017 11:46:40 +0100
Subject: [PATCH] [FL] Added an if-else directive for for MSVC for list
 initialization inside

    member initializer list
---
 .../Fluid/FluidProperties/FluidProperties.h   | 24 ++++++++++++++-----
 ...idPropertiesWithDensityDependentModels.cpp |  6 ++---
 2 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/MaterialLib/Fluid/FluidProperties/FluidProperties.h b/MaterialLib/Fluid/FluidProperties/FluidProperties.h
index 2e4743b3e68..22a224a3620 100644
--- a/MaterialLib/Fluid/FluidProperties/FluidProperties.h
+++ b/MaterialLib/Fluid/FluidProperties/FluidProperties.h
@@ -48,11 +48,17 @@ public:
         std::unique_ptr<MaterialLib::Fluid::FluidProperty>&& heat_capacity,
         std::unique_ptr<MaterialLib::Fluid::FluidProperty>&&
             thermal_conductivity)
-    /* Will use this if MS visual studio compiler supports
-    : _property_models{{std::move(density), std::move(viscosity),
-                        std::move(heat_capacity),
-                        std::move(thermal_conductivity)}}
-    */
+#ifndef MSVC
+        // Up to the latest Visual Studio compiler, Visual Studio 2015
+        // list initialization inside member initializer list or non-static data
+        // member initializer is not implemented.
+        // See: https://msdn.microsoft.com/en-us/library/dn793970.aspx
+        : _property_models{{std::move(density), std::move(viscosity),
+                            std::move(heat_capacity),
+                            std::move(thermal_conductivity)}}
+    {
+    }
+#else
     {
         // Move to the initialization list if MS visual studio compiler supports
         _property_models[static_cast<unsigned>(FluidPropertyType::Density)] =
@@ -65,6 +71,7 @@ public:
             FluidPropertyType::ThermalConductivity)] =
             std::move(thermal_conductivity);
     }
+#endif
 
     virtual ~FluidProperties() = default;
 
@@ -94,6 +101,10 @@ public:
         const PropertyVariableType variable_type) const = 0;
 
 protected:
+#ifdef MSVC
+    std::array<std::unique_ptr<FluidProperty>, FluidPropertyTypeNumber>
+        _property_models;
+#else
     /** Fluid property models.
      *  0: density;
      *  1: viscosity;
@@ -102,8 +113,9 @@ protected:
      *
      *  The index is specified via enum class PropertyType.
      */
-    std::array<std::unique_ptr<FluidProperty>, FluidPropertyTypeNumber>
+    const std::array<std::unique_ptr<FluidProperty>, FluidPropertyTypeNumber>
         _property_models;
+#endif
 };
 
 }  // end namespace
diff --git a/MaterialLib/Fluid/FluidProperties/FluidPropertiesWithDensityDependentModels.cpp b/MaterialLib/Fluid/FluidProperties/FluidPropertiesWithDensityDependentModels.cpp
index 9793b70a46f..c664c3c1235 100644
--- a/MaterialLib/Fluid/FluidProperties/FluidPropertiesWithDensityDependentModels.cpp
+++ b/MaterialLib/Fluid/FluidProperties/FluidPropertiesWithDensityDependentModels.cpp
@@ -35,8 +35,8 @@ FluidPropertiesWithDensityDependentModels::
                       std::move(heat_capacity),
                       std::move(thermal_conductivity)),
       _is_density_dependent{{false, is_viscosity_density_dependent,
-                            is_heat_capacity_dependent,
-                            is_thermal_conductivity}}
+                             is_heat_capacity_dependent,
+                             is_thermal_conductivity}}
 {
 }
 
@@ -77,7 +77,7 @@ double FluidPropertiesWithDensityDependentModels::getdValue(
             ->getdValue(variable_values, variable_type);
     }
 
-    return 0.;
+    return 0.0;
 }
 
 double FluidPropertiesWithDensityDependentModels::compute_df_drho_drho_dT(
-- 
GitLab