build: switch to C++20

Per [1], we should be building with the latest C++ version.  C++20
has been final and approved for over 6 months now, so it is about
time for us to switch.

1. https://github.com/openbmc/docs/blob/master/cpp-style-and-conventions.md#code-should-be-written-with-modern-practices

Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: Iefbe930f9da1d134696aaec18949b2ac1d956f99
diff --git a/meson.build b/meson.build
index 1a48479..6aee1c4 100644
--- a/meson.build
+++ b/meson.build
@@ -1,13 +1,13 @@
 project('sdbusplus', 'cpp', 'c',
     default_options: [
       'buildtype=debugoptimized',
-      'cpp_std=c++17',
+      'cpp_std=c++20',
       'werror=true',
       'tests=' + (meson.is_subproject() ? 'disabled' : 'auto'),
       'examples=' + (meson.is_subproject() ? 'disabled' : 'auto'),
     ],
     version: '1.0.0',
-    meson_version: '>=0.53.2',
+    meson_version: '>=0.57.0',
 )
 
 libsystemd_pkg = dependency('libsystemd')
diff --git a/test/utility/type_traits.cpp b/test/utility/type_traits.cpp
index 0a61648..e1e9473 100644
--- a/test/utility/type_traits.cpp
+++ b/test/utility/type_traits.cpp
@@ -60,7 +60,7 @@
     using namespace testing;
 
     // std::map has member_contains from c++20
-    ASSERT_THAT((has_member_contains_v<std::map<std::string, int>>), Eq(false));
+    ASSERT_THAT((has_member_contains_v<std::map<std::string, int>>), Eq(true));
     ASSERT_THAT(
         (has_member_contains_v<std::vector<std::pair<std::string, int>>>),
         Eq(false));