Use semi-constexpr signatures on MSVC
MSCV does not allow `&typeid(T)` in constexpr contexts, but the string
part of the type signature can still be constexpr. In order to avoid
`typeid` as long as possible, `descr` is modified to collect type
information as template parameters instead of constexpr `typeid`.
The actual `std::type_info` pointers are only collected in the end,
as a `constexpr` (gcc/clang) or regular (MSVC) function call.
Not only does it significantly reduce binary size on MSVC, gcc/clang
benefit a little bit as well, since they can skip some intermediate
`std::type_info*` arrays.
diff --git a/docs/changelog.rst b/docs/changelog.rst
index 1ca501d..8b7047d 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -9,7 +9,11 @@
v2.3.0 (Not yet released)
-----------------------------------------------------
-* TBD
+* Significantly reduced module binary size (10-20%) when compiled in C++11 mode
+ with GCC/Clang, or in any mode with MSVC. Function signatures are now always
+ precomputed at compile time (this was previously only available in C++14 mode
+ for non-MSVC compilers).
+ `#934 <https://github.com/pybind/pybind11/pull/934>`_.
v2.2.1 (September 14, 2017)
-----------------------------------------------------