[PATCH] D32726: [libcxx] [test] In msvc_stdlib_force_include.hpp, use _HAS_CXX17 to set TEST_STD_VER.

Stephan T. Lavavej via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed May 3 17:30:01 PDT 2017


STL_MSFT added inline comments.


================
Comment at: test/support/msvc_stdlib_force_include.hpp:76
 
+#include <ciso646>
+
----------------
EricWF wrote:
> Is the `stdlib.h` include above not enough?
It isn't enough. In MSVC there's a distinction between CRT headers like `stdlib.h` and STL headers like `cstdlib`. Only the STL headers drag in `yvals.h`, our internal STL-wide header that defines internal macros like `_HAS_CXX17`.


================
Comment at: test/support/msvc_stdlib_force_include.hpp:78
+
+#if _HAS_CXX17
+    #define TEST_STD_VER 17
----------------
EricWF wrote:
> Should this be `#if defined(_HAS_CXX17) && _HAS_CXX17` since Clang doesn't define it to the best of my knowledge? (Or maybe Clang/C2 does, IDK)
I guess I didn't explain the macro. `_HAS_CXX17` is an MSVC STL library macro, unconditionally defined. We centralize everything on this, because we have to ask different questions to determine whether C1XX, EDG, or Clang is in 14 or 17 mode, and we additionally permit users to override the detection in one way (it's okay to ask for 17 from the compiler, but only 14 from the libs, at least for the moment; only noexcept in the type system will give us a headache).

As this header is for testing MSVC's STL, we can assume `_HAS_CXX17` is defined.


https://reviews.llvm.org/D32726





More information about the cfe-commits mailing list