diff --git a/Externals/Bochs_disasm/Bochs_disasm.vcxproj b/Externals/Bochs_disasm/Bochs_disasm.vcxproj
index 95b05e09b2..3b93cf68c4 100644
--- a/Externals/Bochs_disasm/Bochs_disasm.vcxproj
+++ b/Externals/Bochs_disasm/Bochs_disasm.vcxproj
@@ -12,6 +12,7 @@
{8ADA04D7-6DB1-4DA4-AB55-64FB12A0997B}
+ 10.0.15063.0
diff --git a/Externals/LZO/LZO.vcxproj b/Externals/LZO/LZO.vcxproj
index 249f745ff1..7bbd4b69c5 100644
--- a/Externals/LZO/LZO.vcxproj
+++ b/Externals/LZO/LZO.vcxproj
@@ -12,6 +12,7 @@
{AB993F38-C31D-4897-B139-A620C42BC565}
+ 10.0.15063.0
diff --git a/Externals/SFML/build/vc2010/SFML_Network.vcxproj b/Externals/SFML/build/vc2010/SFML_Network.vcxproj
index f4ea0ecd30..1a7fb04d36 100644
--- a/Externals/SFML/build/vc2010/SFML_Network.vcxproj
+++ b/Externals/SFML/build/vc2010/SFML_Network.vcxproj
@@ -12,6 +12,7 @@
{93D73454-2512-424E-9CDA-4BB357FE13DD}
+ 10.0.15063.0
diff --git a/Externals/SOIL/SOIL.vcxproj b/Externals/SOIL/SOIL.vcxproj
index 7f3de40f4d..148802e519 100644
--- a/Externals/SOIL/SOIL.vcxproj
+++ b/Externals/SOIL/SOIL.vcxproj
@@ -12,6 +12,7 @@
{B441CC62-877E-4B3F-93E0-0DE80544F705}
+ 10.0.15063.0
diff --git a/Externals/cpp-optparse/cpp-optparse.vcxproj b/Externals/cpp-optparse/cpp-optparse.vcxproj
index aa59b90632..2ab8b046c8 100644
--- a/Externals/cpp-optparse/cpp-optparse.vcxproj
+++ b/Externals/cpp-optparse/cpp-optparse.vcxproj
@@ -12,6 +12,7 @@
{C636D9D1-82FE-42B5-9987-63B7D4836341}
+ 10.0.15063.0
diff --git a/Externals/cubeb/msvc/cubeb.vcxproj b/Externals/cubeb/msvc/cubeb.vcxproj
index 587b12e2c6..0e3cd94134 100644
--- a/Externals/cubeb/msvc/cubeb.vcxproj
+++ b/Externals/cubeb/msvc/cubeb.vcxproj
@@ -1,5 +1,5 @@
-
+
Debug
@@ -12,11 +12,12 @@
{8EA11166-6512-44FC-B7A5-A4D1ECC81170}
+ 10.0.15063.0
StaticLibrary
- v140
+ v141
Unicode
diff --git a/Externals/curl/curl.vcxproj b/Externals/curl/curl.vcxproj
index cfb7d2e200..b62b65494f 100644
--- a/Externals/curl/curl.vcxproj
+++ b/Externals/curl/curl.vcxproj
@@ -286,6 +286,7 @@
{BB00605C-125F-4A21-B33B-7BF418322DCB}
+ 10.0.15063.0
diff --git a/Externals/enet/enet.vcxproj b/Externals/enet/enet.vcxproj
index 23db3250be..71e0086faf 100644
--- a/Externals/enet/enet.vcxproj
+++ b/Externals/enet/enet.vcxproj
@@ -41,6 +41,7 @@
{CBC76802-C128-4B17-BF6C-23B08C313E5E}
+ 10.0.15063.0
diff --git a/Externals/glslang/glslang.vcxproj b/Externals/glslang/glslang.vcxproj
index fd817aa760..da2f4b4eb8 100644
--- a/Externals/glslang/glslang.vcxproj
+++ b/Externals/glslang/glslang.vcxproj
@@ -12,6 +12,7 @@
{D178061B-84D3-44F9-BEED-EFD18D9033F0}
+ 10.0.15063.0
diff --git a/Externals/gtest/cmake/internal_utils.cmake b/Externals/gtest/cmake/internal_utils.cmake
index 8878dc1a95..6184bb26b6 100644
--- a/Externals/gtest/cmake/internal_utils.cmake
+++ b/Externals/gtest/cmake/internal_utils.cmake
@@ -81,8 +81,6 @@ macro(config_compiler_and_linker)
# Suppress "unreachable code" warning on VS 2012 and later.
# http://stackoverflow.com/questions/3232669 explains the issue.
set(cxx_base_flags "${cxx_base_flags} -wd4702")
- endif()
- if (NOT (MSVC_VERSION GREATER 1900)) # 1900 is Visual Studio 2015
# BigObj required for tests.
set(cxx_base_flags "${cxx_base_flags} -bigobj")
endif()
diff --git a/Externals/gtest/include/gtest/internal/gtest-port.h b/Externals/gtest/include/gtest/internal/gtest-port.h
index 0d53ad27a7..fc7989053d 100644
--- a/Externals/gtest/include/gtest/internal/gtest-port.h
+++ b/Externals/gtest/include/gtest/internal/gtest-port.h
@@ -323,7 +323,7 @@
// -std={c,gnu}++{0x,11} is passed. The C++11 standard specifies a
// value for __cplusplus, and recent versions of clang, gcc, and
// probably other compilers set that too in C++11 mode.
-# if __GXX_EXPERIMENTAL_CXX0X__ || __cplusplus >= 201103L
+# if __GXX_EXPERIMENTAL_CXX0X__ || __cplusplus >= 201103L || _MSC_VER >= 1900
// Compiling in at least C++11 mode.
# define GTEST_LANG_CXX11 1
# else
@@ -355,12 +355,16 @@
#if GTEST_STDLIB_CXX11
# define GTEST_HAS_STD_BEGIN_AND_END_ 1
# define GTEST_HAS_STD_FORWARD_LIST_ 1
-# define GTEST_HAS_STD_FUNCTION_ 1
+# if !defined(_MSC_VER) || (_MSC_FULL_VER >= 190023824) // works only with VS2015U2 and better
+# define GTEST_HAS_STD_FUNCTION_ 1
+# endif
# define GTEST_HAS_STD_INITIALIZER_LIST_ 1
# define GTEST_HAS_STD_MOVE_ 1
# define GTEST_HAS_STD_SHARED_PTR_ 1
# define GTEST_HAS_STD_TYPE_TRAITS_ 1
# define GTEST_HAS_STD_UNIQUE_PTR_ 1
+# define GTEST_HAS_UNORDERED_MAP_ 1
+# define GTEST_HAS_UNORDERED_SET_ 1
#endif
// C++11 specifies that provides std::tuple.
diff --git a/Externals/libpng/png/png.vcxproj b/Externals/libpng/png/png.vcxproj
index 030c688872..8c4df78d4e 100644
--- a/Externals/libpng/png/png.vcxproj
+++ b/Externals/libpng/png/png.vcxproj
@@ -12,6 +12,7 @@
{4C9F135B-A85E-430C-BAD4-4C67EF5FC12C}
+ 10.0.15063.0
diff --git a/Externals/libusb/libusb_static_2013.vcxproj b/Externals/libusb/libusb_static_2013.vcxproj
index 32885a3b18..050d459552 100644
--- a/Externals/libusb/libusb_static_2013.vcxproj
+++ b/Externals/libusb/libusb_static_2013.vcxproj
@@ -13,6 +13,7 @@
libusb-1.0
{349EE8F9-7D25-4909-AAF5-FF3FADE72187}
+ 10.0.15063.0
diff --git a/Externals/mbedtls/mbedTLS.vcxproj b/Externals/mbedtls/mbedTLS.vcxproj
index 97bcd85cf3..e677bf329b 100644
--- a/Externals/mbedtls/mbedTLS.vcxproj
+++ b/Externals/mbedtls/mbedTLS.vcxproj
@@ -12,6 +12,7 @@
{BDB6578B-0691-4E80-A46C-DF21639FD3B8}
+ 10.0.15063.0
diff --git a/Externals/miniupnpc/miniupnpc.vcxproj b/Externals/miniupnpc/miniupnpc.vcxproj
index bfe7048051..a5e2eebe9d 100644
--- a/Externals/miniupnpc/miniupnpc.vcxproj
+++ b/Externals/miniupnpc/miniupnpc.vcxproj
@@ -12,6 +12,7 @@
{31643FDB-1BB8-4965-9DE7-000FC88D35AE}
+ 10.0.15063.0
diff --git a/Externals/soundtouch/SoundTouch.vcxproj b/Externals/soundtouch/SoundTouch.vcxproj
index 1c53b7f297..bc65b9fa54 100644
--- a/Externals/soundtouch/SoundTouch.vcxproj
+++ b/Externals/soundtouch/SoundTouch.vcxproj
@@ -12,6 +12,7 @@
{EC082900-B4D8-42E9-9663-77F02F6936AE}
+ 10.0.15063.0
diff --git a/Externals/wxWidgets3/build/msw/wx_base.vcxproj b/Externals/wxWidgets3/build/msw/wx_base.vcxproj
index 4aed0301af..5f4f4a2c09 100644
--- a/Externals/wxWidgets3/build/msw/wx_base.vcxproj
+++ b/Externals/wxWidgets3/build/msw/wx_base.vcxproj
@@ -1343,6 +1343,7 @@
wxWidgets
{1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE}
+ 10.0.15063.0
diff --git a/Externals/xxhash/xxhash.vcxproj b/Externals/xxhash/xxhash.vcxproj
index 65bcd18e59..a486ff3c5f 100644
--- a/Externals/xxhash/xxhash.vcxproj
+++ b/Externals/xxhash/xxhash.vcxproj
@@ -12,6 +12,7 @@
{677EA016-1182-440C-9345-DC88D1E98C0C}
+ 10.0.15063.0
diff --git a/Externals/zlib/zlib.vcxproj b/Externals/zlib/zlib.vcxproj
index cc0d36c45f..9495274f8b 100644
--- a/Externals/zlib/zlib.vcxproj
+++ b/Externals/zlib/zlib.vcxproj
@@ -12,6 +12,7 @@
{FF213B23-2C26-4214-9F88-85271E557E87}
+ 10.0.15063.0
diff --git a/Languages/Languages.vcxproj b/Languages/Languages.vcxproj
index d5995792c8..1bc6a6381a 100644
--- a/Languages/Languages.vcxproj
+++ b/Languages/Languages.vcxproj
@@ -42,6 +42,7 @@
{0E033BE3-2E08-428E-9AE9-BC673EFA12B5}
+ 10.0.15063.0
diff --git a/Readme.md b/Readme.md
index 41dc9ef828..6f9a3ca303 100644
--- a/Readme.md
+++ b/Readme.md
@@ -41,7 +41,7 @@ Dolphin can only be installed on devices that satisfy the above requirements. At
Use the solution file `Source/dolphin-emu.sln` to build Dolphin on Windows.
Visual Studio 2017 is a hard requirement. Other compilers might be
able to build Dolphin on Windows but have not been tested and are not
-recommended to be used. Git must be installed when building.
+recommended to be used. Git and Windows 10 SDK 10.0.15063.0 must be installed when building.
An installer can be created by using the `Installer.nsi` script in the
Installer directory. This will require the Nullsoft Scriptable Install System
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
index 823094bf48..50c04c0f18 100644
--- a/Source/CMakeLists.txt
+++ b/Source/CMakeLists.txt
@@ -13,6 +13,12 @@ if(CMAKE_SYSTEM_NAME MATCHES "Windows")
add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
endif()
+# enable the latest C++ standard feature set,
+# and also disable MSVC specific extensions
+# to be even more standards compliant.
+check_and_add_flag(CPPLATEST /std:c++latest)
+check_and_add_flag(STANDARD_COMPLIANCE /permissive-)
+
# These aren't actually needed for C11/C++11
# but some dependencies require them (LLVM, libav).
add_definitions(-D__STDC_LIMIT_MACROS)
diff --git a/Source/Core/AudioCommon/AudioCommon.vcxproj b/Source/Core/AudioCommon/AudioCommon.vcxproj
index 2ccb711ee5..6ab07e55f4 100644
--- a/Source/Core/AudioCommon/AudioCommon.vcxproj
+++ b/Source/Core/AudioCommon/AudioCommon.vcxproj
@@ -12,6 +12,7 @@
{54AA7840-5BEB-4A0C-9452-74BA4CC7FD44}
+ 10.0.15063.0
diff --git a/Source/Core/Common/Common.vcxproj b/Source/Core/Common/Common.vcxproj
index 6efbf8e215..d11eed1ec6 100644
--- a/Source/Core/Common/Common.vcxproj
+++ b/Source/Core/Common/Common.vcxproj
@@ -12,6 +12,7 @@
{2E6C348C-C75C-4D94-8D1E-9C1FCBF3EFE4}
+ 10.0.15063.0
diff --git a/Source/Core/Common/SCMRevGen.vcxproj b/Source/Core/Common/SCMRevGen.vcxproj
index 75c8763000..aadc70941d 100644
--- a/Source/Core/Common/SCMRevGen.vcxproj
+++ b/Source/Core/Common/SCMRevGen.vcxproj
@@ -12,6 +12,7 @@
{41279555-F94F-4EBC-99DE-AF863C10C5C4}
+ 10.0.15063.0
diff --git a/Source/Core/Core/Core.vcxproj b/Source/Core/Core/Core.vcxproj
index f47971e856..a13c4ea09c 100644
--- a/Source/Core/Core/Core.vcxproj
+++ b/Source/Core/Core/Core.vcxproj
@@ -12,6 +12,7 @@
{E54CF649-140E-4255-81A5-30A673C1FB36}
+ 10.0.15063.0
diff --git a/Source/Core/DiscIO/DiscIO.vcxproj b/Source/Core/DiscIO/DiscIO.vcxproj
index 910943f559..cb31a72776 100644
--- a/Source/Core/DiscIO/DiscIO.vcxproj
+++ b/Source/Core/DiscIO/DiscIO.vcxproj
@@ -12,6 +12,7 @@
{160BDC25-5626-4B0D-BDD8-2953D9777FB5}
+ 10.0.15063.0
diff --git a/Source/Core/DolphinQt2/DolphinQt2.vcxproj b/Source/Core/DolphinQt2/DolphinQt2.vcxproj
index 2c6d5e6a89..e0cd0e09b3 100644
--- a/Source/Core/DolphinQt2/DolphinQt2.vcxproj
+++ b/Source/Core/DolphinQt2/DolphinQt2.vcxproj
@@ -12,7 +12,7 @@
{FA3FA62B-6F58-4B86-9453-4D149940A066}
- 8.1
+ 10.0.15063.0
+ stdcpplatest
+
+ /permissive- %(AdditionalOptions)
- /Zc:inline /Zc:rvalueCast /volatile:iso %(AdditionalOptions)
+ /Zc:inline /volatile:iso %(AdditionalOptions)
/Zo /utf-8 %(AdditionalOptions)
OldStyle
@@ -111,8 +115,6 @@
false
false
_SECURE_SCL=0;%(PreprocessorDefinitions)
-
- /Zc:strictStrings %(AdditionalOptions)