diff --git a/src/hotspot/share/metaprogramming/decay.hpp b/src/hotspot/share/metaprogramming/decay.hpp
index 4dff0500f13..9a23e26b2b3 100644
--- a/src/hotspot/share/metaprogramming/decay.hpp
+++ b/src/hotspot/share/metaprogramming/decay.hpp
@@ -26,16 +26,17 @@
 #define SHARE_METAPROGRAMMING_DECAY_HPP
 
 #include "memory/allocation.hpp"
-#include "metaprogramming/removeCV.hpp"
 #include "metaprogramming/removeReference.hpp"
 
+#include <type_traits>
+
 // This trait trims the type from CV qualifiers and references.
 // This trait provides a subset of the functionality of std::decay;
 // array types and function types are not supported here.
 
 template <typename T>
 struct Decay: AllStatic {
-  typedef typename RemoveCV<typename RemoveReference<T>::type>::type type;
+  using type = std::remove_cv_t<typename RemoveReference<T>::type>;
 };
 
 #endif // SHARE_METAPROGRAMMING_DECAY_HPP
diff --git a/src/hotspot/share/metaprogramming/isIntegral.hpp b/src/hotspot/share/metaprogramming/isIntegral.hpp
index cbae6bd5efc..f191f0fbc6e 100644
--- a/src/hotspot/share/metaprogramming/isIntegral.hpp
+++ b/src/hotspot/share/metaprogramming/isIntegral.hpp
@@ -28,15 +28,16 @@
 
 #include "metaprogramming/integralConstant.hpp"
 #include "metaprogramming/isSigned.hpp"
-#include "metaprogramming/removeCV.hpp"
+
 #include <limits>
+#include <type_traits>
 
 // This metafunction returns true iff the type T (irrespective of CV qualifiers)
 // is an integral type. Note that this is false for enums.
 
 template<typename T>
 struct IsIntegral
-  : public IntegralConstant<bool, std::numeric_limits<typename RemoveCV<T>::type>::is_integer>
+  : public IntegralConstant<bool, std::numeric_limits<typename std::remove_cv<T>::type>::is_integer>
 {};
 
 // This metafunction returns true iff the type T (irrespective of CV qualifiers)
diff --git a/src/hotspot/share/metaprogramming/isSigned.hpp b/src/hotspot/share/metaprogramming/isSigned.hpp
index f04065d2180..2023d656b3c 100644
--- a/src/hotspot/share/metaprogramming/isSigned.hpp
+++ b/src/hotspot/share/metaprogramming/isSigned.hpp
@@ -26,12 +26,13 @@
 #define SHARE_METAPROGRAMMING_ISSIGNED_HPP
 
 #include "metaprogramming/integralConstant.hpp"
-#include "metaprogramming/removeCV.hpp"
+
 #include <limits>
+#include <type_traits>
 
 template<typename T>
 struct IsSigned
-  : public IntegralConstant<bool, std::numeric_limits<typename RemoveCV<T>::type>::is_signed>
+  : public IntegralConstant<bool, std::numeric_limits<typename std::remove_cv<T>::type>::is_signed>
 {};
 
 #endif // SHARE_METAPROGRAMMING_ISSIGNED_HPP
diff --git a/src/hotspot/share/metaprogramming/removeCV.hpp b/src/hotspot/share/metaprogramming/removeCV.hpp
deleted file mode 100644
index 0c0b2f47fa7..00000000000
--- a/src/hotspot/share/metaprogramming/removeCV.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-#ifndef SHARE_METAPROGRAMMING_REMOVECV_HPP
-#define SHARE_METAPROGRAMMING_REMOVECV_HPP
-
-#include "memory/allocation.hpp"
-
-template <typename T>
-struct RemoveCV: AllStatic {
-  typedef T type;
-};
-
-template <typename T>
-struct RemoveCV<const T>: AllStatic {
-  typedef T type;
-};
-
-template <typename T>
-struct RemoveCV<volatile T>: AllStatic {
-  typedef T type;
-};
-
-template <typename T>
-struct RemoveCV<const volatile T>: AllStatic {
-  typedef T type;
-};
-
-#endif // SHARE_METAPROGRAMMING_REMOVECV_HPP
diff --git a/src/hotspot/share/runtime/atomic.hpp b/src/hotspot/share/runtime/atomic.hpp
index df23967afc1..bdd82761bd0 100644
--- a/src/hotspot/share/runtime/atomic.hpp
+++ b/src/hotspot/share/runtime/atomic.hpp
@@ -32,12 +32,12 @@
 #include "metaprogramming/isPointer.hpp"
 #include "metaprogramming/isSame.hpp"
 #include "metaprogramming/primitiveConversions.hpp"
-#include "metaprogramming/removeCV.hpp"
 #include "metaprogramming/removePointer.hpp"
 #include "runtime/orderAccess.hpp"
 #include "utilities/align.hpp"
 #include "utilities/bytes.hpp"
 #include "utilities/macros.hpp"
+
 #include <type_traits>
 
 enum atomic_memory_order {
@@ -1002,8 +1002,8 @@ template<typename D, typename U, typename T>
 struct Atomic::CmpxchgImpl<
   D*, U*, T*,
   typename EnableIf<Atomic::IsPointerConvertible<T*, D*>::value &&
-                    IsSame<typename RemoveCV<D>::type,
-                           typename RemoveCV<U>::type>::value>::type>
+                    IsSame<std::remove_cv_t<D>,
+                           std::remove_cv_t<U>>::value>::type>
 {
   D* operator()(D* volatile* dest, U* compare_value, T* exchange_value,
                atomic_memory_order order) const {
diff --git a/test/hotspot/gtest/metaprogramming/test_removeCV.cpp b/test/hotspot/gtest/metaprogramming/test_removeCV.cpp
deleted file mode 100644
index a91f5aa6e86..00000000000
--- a/test/hotspot/gtest/metaprogramming/test_removeCV.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-#include "precompiled.hpp"
-#include "memory/allocation.hpp"
-#include "metaprogramming/removeCV.hpp"
-#include "metaprogramming/isSame.hpp"
-#include "utilities/debug.hpp"
-
-class RemoveCVTest {
-  class A: AllStatic {};
-
-  typedef const A cA;
-  typedef volatile A vA;
-  typedef const volatile A cvA;
-  typedef A* Aptr;
-  typedef const A* cAptr;
-  typedef A* const Aptrc;
-  typedef const A* const cAptrc;
-  typedef A& Aref;
-  typedef const A& cAref;
-
-  typedef RemoveCV<A>::type rcv_A;
-  static const bool rcv_A_is_A = IsSame<rcv_A, A>::value;
-  STATIC_ASSERT(rcv_A_is_A);
-
-  typedef RemoveCV<cA>::type rcv_cA;
-  static const bool rcv_cA_is_A = IsSame<rcv_cA, A>::value;
-  STATIC_ASSERT(rcv_cA_is_A);
-
-  typedef RemoveCV<vA>::type rcv_vA;
-  static const bool rcv_vA_is_A = IsSame<rcv_vA, A>::value;
-  STATIC_ASSERT(rcv_vA_is_A);
-
-  typedef RemoveCV<cvA>::type rcv_cvA;
-  static const bool rcv_cvA_is_A = IsSame<rcv_cvA, A>::value;
-  STATIC_ASSERT(rcv_cvA_is_A);
-
-  typedef RemoveCV<cAptr>::type rcv_cAptr;
-  static const bool rcv_cAptr_is_cAptr = IsSame<rcv_cAptr, cAptr>::value;
-  STATIC_ASSERT(rcv_cAptr_is_cAptr);
-
-  typedef RemoveCV<Aptrc>::type rcv_Aptrc;
-  static const bool rcv_Aptrc_is_Aptr = IsSame<rcv_Aptrc, Aptr>::value;
-  STATIC_ASSERT(rcv_Aptrc_is_Aptr);
-
-  typedef RemoveCV<cAptrc>::type rcv_cAptrc;
-  static const bool rcv_cAptrc_is_cAptr = IsSame<rcv_cAptrc, cAptr>::value;
-  STATIC_ASSERT(rcv_cAptrc_is_cAptr);
-
-  typedef RemoveCV<cAref>::type rcv_cAref;
-  static const bool rcv_cAref_is_cAref = IsSame<rcv_cAref, cAref>::value;
-  STATIC_ASSERT(rcv_cAref_is_cAref);
-};