Add RAPIDJSON_BUILD_CXX20 option

The travis/appveyor files are updated to reference this option, but it is
not yet enabled in any of the build configurations.
diff --git a/.travis.yml b/.travis.yml
index 17d8f03..ac918be 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -28,69 +28,69 @@
 matrix:
   include:
     # gcc
-    - env: CONF=release ARCH=x86     CXX11=ON  CXX17=OFF MEMBERSMAP=OFF
+    - env: CONF=release ARCH=x86     CXX11=ON  CXX17=OFF CXX20=OFF MEMBERSMAP=OFF
       compiler: gcc
       arch: amd64
-    - env: CONF=release ARCH=x86_64  CXX11=ON  CXX17=OFF MEMBERSMAP=OFF
+    - env: CONF=release ARCH=x86_64  CXX11=ON  CXX17=OFF CXX20=OFF MEMBERSMAP=OFF
       compiler: gcc
       arch: amd64
-    - env: CONF=release ARCH=x86_64  CXX11=ON  CXX17=OFF MEMBERSMAP=ON
+    - env: CONF=release ARCH=x86_64  CXX11=ON  CXX17=OFF CXX20=OFF MEMBERSMAP=ON
       compiler: gcc
       arch: amd64
-    - env: CONF=debug   ARCH=x86     CXX11=OFF CXX17=OFF MEMBERSMAP=OFF
+    - env: CONF=debug   ARCH=x86     CXX11=OFF CXX17=OFF CXX20=OFF MEMBERSMAP=OFF
       compiler: gcc
       arch: amd64
-    - env: CONF=debug   ARCH=x86_64  CXX11=OFF CXX17=OFF MEMBERSMAP=OFF
+    - env: CONF=debug   ARCH=x86_64  CXX11=OFF CXX17=OFF CXX20=OFF MEMBERSMAP=OFF
       compiler: gcc
       arch: amd64
-    - env: CONF=debug   ARCH=x86     CXX11=OFF CXX17=ON  MEMBERSMAP=ON CXX_FLAGS='-D_GLIBCXX_DEBUG'
+    - env: CONF=debug   ARCH=x86     CXX11=OFF CXX17=ON  CXX20=OFF MEMBERSMAP=ON CXX_FLAGS='-D_GLIBCXX_DEBUG'
       compiler: gcc
       arch: amd64
-    - env: CONF=debug   ARCH=x86_64  CXX11=OFF CXX17=ON  MEMBERSMAP=ON CXX_FLAGS='-D_GLIBCXX_DEBUG'
+    - env: CONF=debug   ARCH=x86_64  CXX11=OFF CXX17=ON  CXX20=OFF MEMBERSMAP=ON CXX_FLAGS='-D_GLIBCXX_DEBUG'
       compiler: gcc
       arch: amd64
-    - env: CONF=release ARCH=aarch64 CXX11=ON  CXX17=OFF MEMBERSMAP=OFF
+    - env: CONF=release ARCH=aarch64 CXX11=ON  CXX17=OFF CXX20=OFF MEMBERSMAP=OFF
       compiler: gcc
       arch: arm64
-    - env: CONF=release ARCH=aarch64 CXX11=OFF CXX17=OFF MEMBERSMAP=OFF
+    - env: CONF=release ARCH=aarch64 CXX11=OFF CXX17=OFF CXX20=OFF MEMBERSMAP=OFF
       compiler: gcc
       arch: arm64
-    - env: CONF=release ARCH=aarch64 CXX11=OFF CXX17=ON  MEMBERSMAP=ON
+    - env: CONF=release ARCH=aarch64 CXX11=OFF CXX17=ON  CXX20=OFF MEMBERSMAP=ON
       compiler: gcc
       arch: arm64
     # clang
-    - env: CONF=release ARCH=x86     CXX11=ON  CXX17=OFF MEMBERSMAP=ON  CCACHE_CPP2=yes
+    - env: CONF=release ARCH=x86     CXX11=ON  CXX17=OFF CXX20=OFF MEMBERSMAP=ON  CCACHE_CPP2=yes
       compiler: clang
       arch: amd64
-    - env: CONF=release ARCH=x86_64  CXX11=ON  CXX17=OFF MEMBERSMAP=ON  CCACHE_CPP2=yes
+    - env: CONF=release ARCH=x86_64  CXX11=ON  CXX17=OFF CXX20=OFF MEMBERSMAP=ON  CCACHE_CPP2=yes
       compiler: clang
       arch: amd64
-    - env: CONF=release ARCH=x86_64  CXX11=ON  CXX17=OFF MEMBERSMAP=OFF CCACHE_CPP2=yes
+    - env: CONF=release ARCH=x86_64  CXX11=ON  CXX17=OFF CXX20=OFF MEMBERSMAP=OFF CCACHE_CPP2=yes
       compiler: clang
       arch: amd64
-    - env: CONF=debug   ARCH=x86     CXX11=OFF CXX17=OFF MEMBERSMAP=ON  CCACHE_CPP2=yes
+    - env: CONF=debug   ARCH=x86     CXX11=OFF CXX17=OFF CXX20=OFF MEMBERSMAP=ON  CCACHE_CPP2=yes
       compiler: clang
       arch: amd64
-    - env: CONF=debug   ARCH=x86_64  CXX11=OFF CXX17=OFF MEMBERSMAP=ON  CCACHE_CPP2=yes
+    - env: CONF=debug   ARCH=x86_64  CXX11=OFF CXX17=OFF CXX20=OFF MEMBERSMAP=ON  CCACHE_CPP2=yes
       compiler: clang
       arch: amd64
-    - env: CONF=debug   ARCH=x86     CXX11=OFF CXX17=ON  MEMBERSMAP=OFF CCACHE_CPP2=yes
+    - env: CONF=debug   ARCH=x86     CXX11=OFF CXX17=ON  CXX20=OFF MEMBERSMAP=OFF CCACHE_CPP2=yes
       compiler: clang
       arch: amd64
-    - env: CONF=debug   ARCH=x86_64  CXX11=OFF CXX17=ON  MEMBERSMAP=OFF CCACHE_CPP2=yes
+    - env: CONF=debug   ARCH=x86_64  CXX11=OFF CXX17=ON  CXX20=OFF MEMBERSMAP=OFF CCACHE_CPP2=yes
       compiler: clang
       arch: amd64
-    - env: CONF=debug   ARCH=aarch64 CXX11=ON  CXX17=OFF MEMBERSMAP=ON  CCACHE_CPP2=yes
+    - env: CONF=debug   ARCH=aarch64 CXX11=ON  CXX17=OFF CXX20=OFF MEMBERSMAP=ON  CCACHE_CPP2=yes
       compiler: clang
       arch: arm64
-    - env: CONF=debug   ARCH=aarch64 CXX11=OFF CXX17=OFF MEMBERSMAP=ON  CCACHE_CPP2=yes
+    - env: CONF=debug   ARCH=aarch64 CXX11=OFF CXX17=OFF CXX20=OFF MEMBERSMAP=ON  CCACHE_CPP2=yes
       compiler: clang
       arch: arm64
-    - env: CONF=debug   ARCH=aarch64 CXX11=OFF CXX17=ON  MEMBERSMAP=OFF CCACHE_CPP2=yes
+    - env: CONF=debug   ARCH=aarch64 CXX11=OFF CXX17=ON  CXX20=OFF MEMBERSMAP=OFF CCACHE_CPP2=yes
       compiler: clang
       arch: arm64
     # coverage report
-    - env: CONF=debug   ARCH=x86     GCOV_FLAGS='--coverage' CXX_FLAGS='-O0' CXX11=OFF CXX17=OFF
+    - env: CONF=debug   ARCH=x86     GCOV_FLAGS='--coverage' CXX_FLAGS='-O0' CXX11=OFF CXX17=OFF CXX20=OFF
       compiler: gcc
       arch: amd64
       cache:
@@ -99,7 +99,7 @@
       after_success:
         - pip install --user cpp-coveralls
         - coveralls -r .. --gcov-options '\-lp' -e thirdparty -e example -e test -e build/CMakeFiles -e include/rapidjson/msinttypes -e include/rapidjson/internal/meta.h -e include/rapidjson/error/en.h
-    - env: CONF=debug   ARCH=x86_64  GCOV_FLAGS='--coverage' CXX_FLAGS='-O0' CXX11=ON  CXX17=OFF MEMBERSMAP=ON
+    - env: CONF=debug   ARCH=x86_64  GCOV_FLAGS='--coverage' CXX_FLAGS='-O0' CXX11=ON  CXX17=OFF CXX20=OFF MEMBERSMAP=ON
       compiler: gcc
       arch: amd64
       cache:
@@ -108,7 +108,7 @@
       after_success:
         - pip install --user cpp-coveralls
         - coveralls -r .. --gcov-options '\-lp' -e thirdparty -e example -e test -e build/CMakeFiles -e include/rapidjson/msinttypes -e include/rapidjson/internal/meta.h -e include/rapidjson/error/en.h
-    - env: CONF=debug   ARCH=aarch64 GCOV_FLAGS='--coverage' CXX_FLAGS='-O0' CXX11=OFF CXX17=ON
+    - env: CONF=debug   ARCH=aarch64 GCOV_FLAGS='--coverage' CXX_FLAGS='-O0' CXX11=OFF CXX17=ON  CXX20=OFF
       compiler: gcc
       arch: arm64
       cache:
@@ -155,6 +155,7 @@
       -DRAPIDJSON_USE_MEMBERSMAP=$MEMBERSMAP
       -DRAPIDJSON_BUILD_CXX11=$CXX11
       -DRAPIDJSON_BUILD_CXX17=$CXX17
+      -DRAPIDJSON_BUILD_CXX20=$CXX20
       -DCMAKE_VERBOSE_MAKEFILE=ON
       -DCMAKE_BUILD_TYPE=$CONF
       -DCMAKE_CXX_FLAGS="$ARCH_FLAGS $GCOV_FLAGS $CXX_FLAGS"
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 58eca22..1b3a79d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -37,6 +37,7 @@
 
 option(RAPIDJSON_BUILD_CXX11 "Build rapidjson with C++11" ON)
 option(RAPIDJSON_BUILD_CXX17 "Build rapidjson with C++17" OFF)
+option(RAPIDJSON_BUILD_CXX20 "Build rapidjson with C++20" OFF)
 if(RAPIDJSON_BUILD_CXX11)
     set(CMAKE_CXX_STANDARD 11)
     set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
@@ -87,6 +88,8 @@
         endif()
     elseif (RAPIDJSON_BUILD_CXX17 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.0")
         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
+    elseif (RAPIDJSON_BUILD_CXX20 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.0")
+        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20")
     endif()
     if (RAPIDJSON_BUILD_ASAN)
         if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.0")
@@ -117,6 +120,8 @@
         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
     elseif (RAPIDJSON_BUILD_CXX17 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.0")
         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
+    elseif (RAPIDJSON_BUILD_CXX20 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "10.0")
+        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20")
     endif()
     if (RAPIDJSON_BUILD_ASAN)
         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
@@ -137,6 +142,8 @@
         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++11")
     elseif (RAPIDJSON_BUILD_CXX17 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "19.14")
         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++17")
+    elseif (RAPIDJSON_BUILD_CXX20 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "19.29")
+        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++20")
     endif()
     # Always compile with /WX
     if(CMAKE_CXX_FLAGS MATCHES "/WX-")
diff --git a/appveyor.yml b/appveyor.yml
index 4044ba6..0623dce 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -15,83 +15,96 @@
     VS_PLATFORM: win32
     CXX11: OFF
     CXX17: OFF
+    CXX20: OFF
     MEMBERSMAP: OFF
   - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
     VS_VERSION: 10 2010
     VS_PLATFORM: x64
     CXX11: OFF
     CXX17: OFF
+    CXX20: OFF
     MEMBERSMAP: ON
   - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
     VS_VERSION: 11 2012
     VS_PLATFORM: win32
     CXX11: OFF
     CXX17: OFF
+    CXX20: OFF
     MEMBERSMAP: ON
   - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
     VS_VERSION: 11 2012
     VS_PLATFORM: x64
     CXX11: OFF
     CXX17: OFF
+    CXX20: OFF
     MEMBERSMAP: OFF
   - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
     VS_VERSION: 12 2013
     VS_PLATFORM: win32
     CXX11: OFF
     CXX17: OFF
+    CXX20: OFF
     MEMBERSMAP: OFF
   - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013
     VS_VERSION: 12 2013
     VS_PLATFORM: x64
     CXX11: OFF
     CXX17: OFF
+    CXX20: OFF
     MEMBERSMAP: ON
   - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
     VS_VERSION: 14 2015
     VS_PLATFORM: win32
     CXX11: OFF
     CXX17: OFF
+    CXX20: OFF
     MEMBERSMAP: ON
   - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
     VS_VERSION: 14 2015
     VS_PLATFORM: x64
     CXX11: OFF
     CXX17: OFF
+    CXX20: OFF
     MEMBERSMAP: OFF
   - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
     VS_VERSION: 15 2017
     VS_PLATFORM: win32
     CXX11: OFF
     CXX17: OFF
+    CXX20: OFF
     MEMBERSMAP: OFF
   - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
     VS_VERSION: 15 2017
     VS_PLATFORM: x64
     CXX11: OFF
     CXX17: OFF
+    CXX20: OFF
     MEMBERSMAP: ON
   - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
     VS_VERSION: 15 2017
     VS_PLATFORM: x64
     CXX11: ON
     CXX17: OFF
+    CXX20: OFF
     MEMBERSMAP: OFF
   - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
     VS_VERSION: 15 2017
     VS_PLATFORM: x64
     CXX11: OFF
     CXX17: ON
+    CXX20: OFF
     MEMBERSMAP: OFF
   - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
     VS_VERSION: 16 2019
     VS_PLATFORM: x64
     CXX11: OFF
     CXX17: ON
+    CXX20: OFF
     MEMBERSMAP: ON
 
 before_build:
 - git submodule update --init --recursive
-- cmake -H. -BBuild/VS -G "Visual Studio %VS_VERSION%" -DCMAKE_GENERATOR_PLATFORM=%VS_PLATFORM% -DCMAKE_VERBOSE_MAKEFILE=ON -DBUILD_SHARED_LIBS=true -DRAPIDJSON_BUILD_CXX11=%CXX11% -DRAPIDJSON_BUILD_CXX17=%CXX17% -DRAPIDJSON_USE_MEMBERSMAP=%MEMBERSMAP% -Wno-dev
+- cmake -H. -BBuild/VS -G "Visual Studio %VS_VERSION%" -DCMAKE_GENERATOR_PLATFORM=%VS_PLATFORM% -DCMAKE_VERBOSE_MAKEFILE=ON -DBUILD_SHARED_LIBS=true -DRAPIDJSON_BUILD_CXX11=%CXX11% -DRAPIDJSON_BUILD_CXX17=%CXX17% -DRAPIDJSON_BUILD_CXX20=%CXX20% -DRAPIDJSON_USE_MEMBERSMAP=%MEMBERSMAP% -Wno-dev
 
 build:
   project: Build\VS\RapidJSON.sln