--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -111,7 +111,7 @@
 enable_testing()
 
 # Set required standard to C++11.
-set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
 # Ensure that GCC is new enough, if the compiler is GCC.
--- a/src/mlpack/bindings/python/setup.py.in
+++ b/src/mlpack/bindings/python/setup.py.in
@@ -52,7 +52,7 @@
 else:
   cxx_flags = '${CMAKE_CXX_FLAGS}'.strip()
   cxx_flags = re.sub(' +', ' ', cxx_flags)
-  extra_args = ['-DBINDING_TYPE=BINDING_TYPE_PYX', '-std=c++11']
+  extra_args = ['-DBINDING_TYPE=BINDING_TYPE_PYX', '-std=c++17']
   if '${OpenMP_CXX_FLAGS}' != '':
     extra_args.append('${OpenMP_CXX_FLAGS}')
   if cxx_flags:
--- a/src/mlpack/bindings/R/mlpack/src/Makevars
+++ b/src/mlpack/bindings/R/mlpack/src/Makevars
@@ -1,3 +1,3 @@
 PKG_CXXFLAGS = -DBOOST_MATH_PROMOTE_DOUBLE_POLICY=false -I. $(SHLIB_OPENMP_CXXFLAGS)
 PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS) $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
-CXX_STD = CXX11
+CXX_STD = CXX17
--- a/src/mlpack/core/cereal/CMakeLists.txt
+++ b/src/mlpack/core/cereal/CMakeLists.txt
@@ -4,10 +4,8 @@
   array_wrapper.hpp
   is_loading.hpp
   is_saving.hpp
-  pair_associative_container.hpp
   pointer_wrapper.hpp
   pointer_vector_wrapper.hpp
-  unordered_map.hpp
 )
 
 # add directory name to sources
--- a/src/mlpack/prereqs.hpp
+++ b/src/mlpack/prereqs.hpp
@@ -110,7 +110,7 @@
 #include <cereal/types/array.hpp>
 #include <cereal/types/string.hpp>
 #include <cereal/types/tuple.hpp>
-#include <mlpack/core/cereal/unordered_map.hpp>
+#include <cereal/types/unordered_map.hpp>
 #include <cereal/types/utility.hpp>
 #include <cereal/types/vector.hpp>
 
