diff --git a/docs/upgrade.rst b/docs/upgrade.rst
index 77382da7c8..6a9db2d08f 100644
--- a/docs/upgrade.rst
+++ b/docs/upgrade.rst
@@ -411,7 +411,7 @@ error is raised if the compiler does not meet the requirements:
* GCC >= 4.8
* clang >= 3.3 (appleclang >= 5.0)
-* MSVC >= 2017
+* MSVC >= 2015u3
* Intel C++ >= 15.0
diff --git a/include/pybind11/detail/common.h b/include/pybind11/detail/common.h
index 863a293869..1070d686ec 100644
--- a/include/pybind11/detail/common.h
+++ b/include/pybind11/detail/common.h
@@ -822,9 +822,7 @@ struct is_template_base_of_impl {
/// Check if a template is the base of a type. For example:
/// `is_template_base_of` is true if `struct T : Base {}` where U can be anything
template class Base, typename T>
-#if defined(PYBIND11_CPP20) || !defined(_MSC_VER) \
- || _MSC_VER > 1930 /* Increment as needed, let MS know please. */
-// https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros
+#if defined(PYBIND11_CPP20) || !defined(_MSC_VER) // Sadly, all MSVC versions incl. 2022 need this.
using is_template_base_of
= decltype(is_template_base_of_impl::check((intrinsic_t *) nullptr));
#else