diff --git a/BaseLib/ConfigTree.h b/BaseLib/ConfigTree.h
index e4cfe1825e38bab7529ae413dd4796dda2db002f..b56d15010d2e3d0a76628ad936f5d7f492356425 100644
--- a/BaseLib/ConfigTree.h
+++ b/BaseLib/ConfigTree.h
@@ -545,12 +545,7 @@ private:
      *
      * This method only acts as a helper method and throws std::runtime_error.
      */
-#if defined(_MSC_VER) && _MSC_VER < 1500
-    __declspec(noreturn)
-#else
-    [[noreturn]]
-#endif
-        void error(std::string const& message) const;
+    [[noreturn]] void error(std::string const& message) const;
 
     //! Called for printing warning messages. Will call the warning callback.
     //! This method only acts as a helper method.
diff --git a/BaseLib/Error.h b/BaseLib/Error.h
index 05d5dd78e8e8ebc7fe9576b3881a6c668ec0648e..e563d4b90179f97151170c03a09f0bc24278f0d0 100644
--- a/BaseLib/Error.h
+++ b/BaseLib/Error.h
@@ -19,11 +19,7 @@ namespace BaseLib
 namespace detail
 {
 template <typename Msg>
-#if defined(_MSC_VER) && _MSC_VER < 1500
-__declspec(noreturn)
-#else
 [[noreturn]]
-#endif
     bool error_impl(Msg&& msg)
 {
     ERR("%s", msg.data());
@@ -43,11 +39,7 @@ namespace BaseLib
 namespace detail
 {
 template <typename Msg>
-#if defined(_MSC_VER) && _MSC_VER < 1500
-__declspec(noreturn)
-#else
 [[noreturn]]
-#endif
     bool error_impl(Msg&& msg)
 {
     throw std::runtime_error(std::forward<Msg>(msg));
diff --git a/BaseLib/RunTime.h b/BaseLib/RunTime.h
index c06d37d5c2130625772d9f76d07cd5e3e2a53c4c..49c8194cef2015a83befcfb843da50ac0a699f1e 100644
--- a/BaseLib/RunTime.h
+++ b/BaseLib/RunTime.h
@@ -38,7 +38,7 @@ class RunTime
 #if defined(USE_MPI)
             _start_time = MPI_Wtime();
 #else
-#ifndef _MSC_VER
+#ifndef WIN32
             timeval t;
             gettimeofday(&t, nullptr);
             _start_time = t.tv_sec + t.tv_usec/1000000.0;
@@ -54,7 +54,7 @@ class RunTime
 #if defined(USE_MPI)
             return MPI_Wtime() - _start_time;
 #else
-#ifndef _MSC_VER
+#ifndef WIN32
             timeval t;
             gettimeofday(&t, nullptr);
             return t.tv_sec + t.tv_usec/1000000.0 - _start_time;
diff --git a/NumLib/Assembler/SerialExecutor.h b/NumLib/Assembler/SerialExecutor.h
index 2856d502824888a6890fdd43e72879d07a265037..e6f497e2ca198801fbfd054c924b02783558436c 100644
--- a/NumLib/Assembler/SerialExecutor.h
+++ b/NumLib/Assembler/SerialExecutor.h
@@ -46,11 +46,7 @@ struct SerialExecutor
     ///
     template <typename F, typename C, typename... Args_>
     static void
-#if defined(_MSC_VER) && (_MSC_VER >= 1700)
-    executeDereferenced(F& f, C const& c, Args_&&... args)
-#else
     executeDereferenced(F const& f, C const& c, Args_&&... args)
-#endif
     {
         for (std::size_t i = 0; i < c.size(); i++)
         {
@@ -191,12 +187,8 @@ struct SerialExecutor
     ///             size().
     /// \param args additional arguments passed to \c f
     template <typename F, typename C, typename Data, typename... Args_>
-    static void
-#if defined(_MSC_VER) && (_MSC_VER >= 1700)
-    transformDereferenced(F& f, C const& c, Data& data, Args_&&... args)
-#else
-    transformDereferenced(F const& f, C const& c, Data& data, Args_&&... args)
-#endif
+    static void transformDereferenced(F const& f, C const& c, Data& data,
+                                      Args_&&... args)
     {
         assert(c.size() == data.size());
 
diff --git a/Tests/GeoLib/TestLineSegmentIntersect2d.cpp b/Tests/GeoLib/TestLineSegmentIntersect2d.cpp
index ff0f68f081ad9e75c6418d5e5a9440683bcb81f2..3964336345344d86e8d6f90da4183156e9dd9ade 100644
--- a/Tests/GeoLib/TestLineSegmentIntersect2d.cpp
+++ b/Tests/GeoLib/TestLineSegmentIntersect2d.cpp
@@ -50,13 +50,6 @@ public:
     ac::gtest_reporter gtest_reporter;
 };
 
-#if !defined(_MSC_VER) || (_MSC_VER >= 2000)
-// Compilers of MVS below 2015 do not support unrestricted unions. The
-// unrestricted union is used by autocheck to handle test data. The autocheck
-// workaround for MVS compilers (below version 2015) contains a bug and in the
-// consequence the tests crashes. For this reason the tests are disabled under
-// this environments.
-
 // Test the intersection of intersecting line segments. Line segments are chords
 // of the same circle that both contains the center of the circle. As a
 // consequence the center of the circle is the intersection point.
@@ -139,5 +132,3 @@ TEST_F(LineSegmentIntersect2dTest, ParallelIntersectingSegmentOrientation)
         ac::make_arbitrary(pair_segment_generator2),
         gtest_reporter);
 }
-
-#endif
diff --git a/Tests/GeoLib/TestSortSegments.cpp b/Tests/GeoLib/TestSortSegments.cpp
index 7e2a05d8f72b1d1ba11b4af6cd4d52502f3900b1..3aa11c2688480e263a22cf7aa635f1bc87a91005 100644
--- a/Tests/GeoLib/TestSortSegments.cpp
+++ b/Tests/GeoLib/TestSortSegments.cpp
@@ -30,13 +30,6 @@ public:
     ac::gtest_reporter gtest_reporter;
 };
 
-#if !defined(_MSC_VER) || (_MSC_VER >= 2000)
-// Compilers of MVS below 2015 do not support unrestricted unions. The
-// unrestricted union is used by autocheck to handle test data. The autocheck
-// workaround for MVS compilers (below version 2015) contains a bug and in the
-// consequence the tests crashes. For this reason the tests are disabled under
-// this environments.
-
 // Use a chord of the unit circle as the original line segment. The line segment
 // will be partitioned into several sub segments. The set of subsegments are
 // given to the algorithm.
@@ -115,5 +108,3 @@ TEST_F(GeoLibSortLineSegments, SortSubSegments)
         ac::make_arbitrary(segment_generator),
         gtest_reporter);
 }
-
-#endif
diff --git a/ThirdParty/autocheck b/ThirdParty/autocheck
index 534165413e0175df6454e634d10a86626b475034..9a4f2bc839ead140bb7201052c69809943ca5b30 160000
--- a/ThirdParty/autocheck
+++ b/ThirdParty/autocheck
@@ -1 +1 @@
-Subproject commit 534165413e0175df6454e634d10a86626b475034
+Subproject commit 9a4f2bc839ead140bb7201052c69809943ca5b30