This is an archive of the discontinued LLVM Phabricator instance.

[libcxx] [test] In msvc_stdlib_force_include.hpp, use _HAS_CXX17 to set TEST_STD_VER.
ClosedPublic

Authored by STL_MSFT on May 1 2017, 5:38 PM.

Details

Summary

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

_HAS_CXX17 indicates whether MSVC's STL is in C++17 mode.

Diff Detail

Event Timeline

STL_MSFT created this revision.May 1 2017, 5:38 PM
EricWF accepted this revision.May 3 2017, 2:21 PM

LGTM after addressing inline comments.

test/support/msvc_stdlib_force_include.hpp
76

Is the stdlib.h include above not enough?

78

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)

This revision is now accepted and ready to land.May 3 2017, 2:21 PM
EricWF added a comment.May 3 2017, 2:22 PM

Also you're free to commit to MSVC specific files without pre-commit review :-)

STL_MSFT added inline comments.May 3 2017, 5:30 PM
test/support/msvc_stdlib_force_include.hpp
76

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.

78

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.

STL_MSFT closed this revision.May 3 2017, 6:49 PM