diff --git a/CMakeLists.txt b/CMakeLists.txt
index c7f2d4c0431f25074894277be025fe207bbb5cb7..bccc712bc7af5324e284f166769f2d1505358a39 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -198,10 +198,14 @@ endif()
 
 # Compiler flags
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PUGS_CXX_FLAGS}")
+set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${PUGS_CXX_FLAGS}")
+set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${PUGS_CXX_FLAGS}")
 
-# Add debug mode for Standard C++ library
-set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_GLIBCXX_DEBUG -D_LIBCPP_DEBUG=1 ${PUGS_CXX_FLAGS}")
-set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -D_GLIBCXX_DEBUG -D_LIBCPP_DEBUG=1 ${PUGS_CXX_FLAGS}")
+# Add debug mode for Standard C++ library (not for AppleClang since it is broken)
+if (NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
+  set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_GLIBCXX_DEBUG -D_LIBCPP_DEBUG=1")
+  set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -D_GLIBCXX_DEBUG -D_LIBCPP_DEBUG=1")
+endif()
 
 #------------------------------------------------------
 
diff --git a/src/output/VTKWriter.hpp b/src/output/VTKWriter.hpp
index 4656a183977e28b00853a847ad1ec3b9c89cc9a1..acd10acd57a8c7a7011687b366192f330739356f 100644
--- a/src/output/VTKWriter.hpp
+++ b/src/output/VTKWriter.hpp
@@ -85,6 +85,19 @@ class VTKWriter
   template <typename DataType>
   struct VTKType
   {
+    inline const static std::string name = [] {
+      static_assert(std::is_arithmetic_v<DataType>, "invalid data type");
+
+      if constexpr (std::is_integral_v<DataType>) {
+        if constexpr (std::is_unsigned_v<DataType>) {
+          return "UInt" + std::to_string(sizeof(DataType) * 8);
+        } else {
+          return "UInt" + std::to_string(sizeof(DataType) * 8);
+        }
+      } else if constexpr (std::is_floating_point_v<DataType>) {
+        return "Float" + std::to_string(sizeof(DataType) * 8);
+      }
+    }();
   };
 
   template <typename DataType>
@@ -360,64 +373,4 @@ class VTKWriter
   ~VTKWriter() = default;
 };
 
-template <>
-struct VTKWriter::VTKType<int8_t>
-{
-  inline const static std::string name{"Int8"};
-};
-
-template <>
-struct VTKWriter::VTKType<uint8_t>
-{
-  inline const static std::string name{"UInt8"};
-};
-
-template <>
-struct VTKWriter::VTKType<int16_t>
-{
-  inline const static std::string name{"Int16"};
-};
-
-template <>
-struct VTKWriter::VTKType<uint16_t>
-{
-  inline const static std::string name{"UInt16"};
-};
-
-template <>
-struct VTKWriter::VTKType<int32_t>
-{
-  inline const static std::string name{"Int32"};
-};
-
-template <>
-struct VTKWriter::VTKType<uint32_t>
-{
-  inline const static std::string name{"UInt32"};
-};
-
-template <>
-struct VTKWriter::VTKType<int64_t>
-{
-  inline const static std::string name{"Int64"};
-};
-
-template <>
-struct VTKWriter::VTKType<uint64_t>
-{
-  inline const static std::string name{"UInt64"};
-};
-
-template <>
-struct VTKWriter::VTKType<float>
-{
-  inline const static std::string name{"Float32"};
-};
-
-template <>
-struct VTKWriter::VTKType<double>
-{
-  inline const static std::string name{"Float64"};
-};
-
 #endif   // VTK_WRITER_HPP