diff --git a/doc/predef.adoc b/doc/predef.adoc index b7a2980..1d084f9 100644 --- a/doc/predef.adoc +++ b/doc/predef.adoc @@ -708,6 +708,8 @@ include::../include/boost/predef/library/std/stlport.h[tag=reference] include::../include/boost/predef/library/std/vacpp.h[tag=reference] +include::../include/boost/predef/library/std/msvc.h[tag=reference] + :leveloffset: -3 === `BOOST_OS` operating system macros diff --git a/include/boost/predef/library/std.h b/include/boost/predef/library/std.h index 403b6ff..f8d34b4 100644 --- a/include/boost/predef/library/std.h +++ b/include/boost/predef/library/std.h @@ -16,6 +16,7 @@ http://www.boost.org/LICENSE_1_0.txt) #include #include #include +#include #include #include #include diff --git a/include/boost/predef/library/std/msvc.h b/include/boost/predef/library/std/msvc.h new file mode 100644 index 0000000..de33662 --- /dev/null +++ b/include/boost/predef/library/std/msvc.h @@ -0,0 +1,53 @@ +/* +Copyright Henrik S. Gaßmann 2023 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef BOOST_PREDEF_LIBRARY_STD_MSVC_H +#define BOOST_PREDEF_LIBRARY_STD_MSVC_H + +#include + +#include +#include + +/* tag::reference[] += `BOOST_LIB_STD_MSVC` + +https://github.com/microsoft/STL[Microsoft's {CPP} Standard Library]. +If available version number as major, minor, and patch. +The patch number is derived from `_MSVC_STL_UPDATE` by taking its five last +digits (see below). This implies that pasting a `_MSVC_STL_UPDATE` value into +`BOOST_VERSION_NUMBER` will produce a version number that is directly comparable +to `BOOST_LIB_STD_MSVC`. + +[options="header"] +|=== +| {predef_symbol} | {predef_version} + +| `+_MSVC_STL_VERSION+` | {predef_detection} + +| `+_MSVC_STL_VERSION+` | VV.R.0 +| `+_MSVC_STL_UPDATE+` | 00.0.0YYYMM +|=== +*/ // end::reference[] + +#define BOOST_LIB_STD_MSVC BOOST_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(_MSVC_STL_VERSION) +# undef BOOST_LIB_STD_MSVC +# define BOOST_LIB_STD_MSVC BOOST_PREDEF_MAKE_10_VVR_0PPPPP(_MSVC_STL_VERSION, _MSVC_STL_UPDATE) +#endif + +#if BOOST_LIB_STD_MSVC +# define BOOST_LIB_STD_MSVC_AVAILABLE +#endif + +#define BOOST_LIB_STD_MSVC_NAME "Microsoft stdlib" + +#endif + +#include +BOOST_PREDEF_DECLARE_TEST(BOOST_LIB_STD_MSVC, BOOST_LIB_STD_MSVC_NAME) diff --git a/include/boost/predef/make.h b/include/boost/predef/make.h index e65a0e1..c2aa874 100644 --- a/include/boost/predef/make.h +++ b/include/boost/predef/make.h @@ -106,6 +106,10 @@ Macros are: */ // end::reference[] #define BOOST_PREDEF_MAKE_10_VV00(V) BOOST_VERSION_NUMBER(((V)/100)%100,0,0) /* tag::reference[] +* `BOOST_PREDEF_MAKE_10_VVR_0PPPPP(V, P)`, the second parameter specifies a year-month patch level with the first digit discarded +*/ // end::reference[] +#define BOOST_PREDEF_MAKE_10_VVR_0PPPPP(V, P) BOOST_VERSION_NUMBER(((V)/10)%100,(V)%10,(P)%100000) +/* tag::reference[] * `BOOST_PREDEF_MAKE_10_VVRR(V)` */ // end::reference[] #define BOOST_PREDEF_MAKE_10_VVRR(V) BOOST_VERSION_NUMBER(((V)/100)%100,(V)%100,0) diff --git a/test/make.cpp b/test/make.cpp index 6b84624..0a9e58c 100644 --- a/test/make.cpp +++ b/test/make.cpp @@ -54,6 +54,7 @@ void test_BOOST_VERSION_NUMBER() /* PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VVRR00PP00(9999009900ull) == BOOST_VERSION_NUMBER(99,99,99)); */ PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VVRR0PP00(999909900) == BOOST_VERSION_NUMBER(99,99,99)); PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VV00(9900) == BOOST_VERSION_NUMBER(99,00,00)); + PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VVR_0PPPPP(999,299999) == BOOST_VERSION_NUMBER(99,9,99999)); PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VVRR0PPPP(999909999) == BOOST_VERSION_NUMBER(99,99,9999)); PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VRR(999) == BOOST_VERSION_NUMBER(9,99,00)); PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VVRRPPP(903122) == BOOST_VERSION_NUMBER(9,3,122));