[libcxx] r342073 - Implement the infrastructure for feature-test macros. Very few actual feature test macros, though. Reviewed as: https://reviews.llvm.org/D51955

Christof Douma via cfe-commits cfe-commits at lists.llvm.org
Wed Oct 3 03:38:10 PDT 2018


Hi.

Yes, including <utility> would try to include the “version” file inside the users project. The problem is not the existence of the header file, but the #include directive that is not guarded. To give examples on when this goes wrong:

A project uses VERSION in their source directory to hold some version string used in the build system. On platforms like Windows and OS X this file is indistinguishable from the system include file that many headers include.

I don’t think this is a strange setup, and while I expect that for C++20 code bases, people need to pick a different name, I think that existing projects should not be bothered by this. It would be nice if everybody was using -iquote, or better in my opinion, that -I was behaving like -iquote. But a fix that we can apply now is to use:

  #if _LIBCPP_STD_VER > 17
    #include <version>
  #endif

Would that be acceptable?

Thanks,
Christof

From: Eric Fiselier <eric at efcs.ca>
Date: Tuesday, 2 October 2018 at 19:52
To: Christof Douma <Christof.Douma at arm.com>
Cc: Marshall Clow <mclow.lists at gmail.com>, cfe-commits <cfe-commits at lists.llvm.org>, nd <nd at arm.com>
Subject: Re: [libcxx] r342073 - Implement the infrastructure for feature-test macros. Very few actual feature test macros, though. Reviewed as: https://reviews.llvm.org/D51955


On Tue, Oct 2, 2018 at 1:33 PM Christof Douma via cfe-commits <cfe-commits at lists.llvm.org<mailto:cfe-commits at lists.llvm.org>> wrote:
Hi Marshall.

I think that this patch breaks backwards compatibility.  Assumes that the header file "version" is used by C++ projects that use a C++ standard that did not specify a 'version' header. Many toolchains will put search paths specified with -I in front of the system search path. The result is that the application header file is included whenever a standard header file is included. That is unexpected and can break builds.

Do you agree this is an issue or do you consider this an issue with the way toolchains handle include search paths?

If I understand correctly, you have user code which provides a header called "version", and now when files like <utility> include <version> they pick up the user header instead of the STL one?
Are you specifying custom libc++ include paths when this occurs? Or just passing "-stdlib=libc++" and letting the compiler do the rest?

In general, I don't consider this a bug. There is no way for libc++ to make the <version> file disappear in older dialects, and libc++ headers are free to include w/e additional headers
they need.



Thanks,
Christof


On 12/09/2018, 20:42, "cfe-commits on behalf of Marshall Clow via cfe-commits" <cfe-commits-bounces at lists.llvm.org<mailto:cfe-commits-bounces at lists.llvm.org> on behalf of cfe-commits at lists.llvm.org<mailto:cfe-commits at lists.llvm.org>> wrote:

    Author: marshall
    Date: Wed Sep 12 12:41:40 2018
    New Revision: 342073

    URL: http://llvm.org/viewvc/llvm-project?rev=342073&view=rev
    Log:
    Implement the infrastructure for feature-test macros. Very few actual feature test macros, though. Reviewed as: https://reviews.llvm.org/D51955

    Added:
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/algorithm.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/any.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/array.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/atomic.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/bit.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/chrono.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/cmath.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/complex.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/concepts.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/cstddef.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/deque.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/exception.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/execution.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/filesystem.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/forward_list.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/functional.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/iomanip.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/iterator.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/list.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/map.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/memory.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/memory_resource.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/mutex.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/new.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/numeric.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/optional.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/regex.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/scoped_allocator.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/set.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/shared_mutex.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/string.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/string_view.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/tuple.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/type_traits.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/unordered_map.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/unordered_set.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/utility.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/variant.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/vector.version.pass.cpp
        libcxx/trunk/test/std/language.support/support.limits/support.limits.general/version.version.pass.cpp
    Modified:
        libcxx/trunk/include/algorithm
        libcxx/trunk/include/any
        libcxx/trunk/include/array
        libcxx/trunk/include/atomic
        libcxx/trunk/include/bit
        libcxx/trunk/include/chrono
        libcxx/trunk/include/cmath
        libcxx/trunk/include/complex
        libcxx/trunk/include/cstddef
        libcxx/trunk/include/deque
        libcxx/trunk/include/exception
        libcxx/trunk/include/filesystem
        libcxx/trunk/include/forward_list
        libcxx/trunk/include/functional
        libcxx/trunk/include/iomanip
        libcxx/trunk/include/iterator
        libcxx/trunk/include/list
        libcxx/trunk/include/map
        libcxx/trunk/include/memory
        libcxx/trunk/include/mutex
        libcxx/trunk/include/new
        libcxx/trunk/include/numeric
        libcxx/trunk/include/optional
        libcxx/trunk/include/regex
        libcxx/trunk/include/scoped_allocator
        libcxx/trunk/include/set
        libcxx/trunk/include/shared_mutex
        libcxx/trunk/include/string
        libcxx/trunk/include/string_view
        libcxx/trunk/include/tuple
        libcxx/trunk/include/type_traits
        libcxx/trunk/include/unordered_map
        libcxx/trunk/include/unordered_set
        libcxx/trunk/include/utility
        libcxx/trunk/include/variant
        libcxx/trunk/include/vector
        libcxx/trunk/include/version

    Modified: libcxx/trunk/include/algorithm
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/algorithm?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/algorithm (original)
    +++ libcxx/trunk/include/algorithm Wed Sep 12 12:41:40 2018
    @@ -646,6 +646,7 @@ template <class BidirectionalIterator, c
     #include <iterator>
     #include <cstddef>
     #include <bit>
    +#include <version>

     #include <__debug>


    Modified: libcxx/trunk/include/any
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/any?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/any (original)
    +++ libcxx/trunk/include/any Wed Sep 12 12:41:40 2018
    @@ -87,6 +87,7 @@ namespace std {
     #include <typeinfo>
     #include <type_traits>
     #include <cstdlib>
    +#include <version>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     #pragma GCC system_header

    Modified: libcxx/trunk/include/array
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/array?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/array (original)
    +++ libcxx/trunk/include/array Wed Sep 12 12:41:40 2018
    @@ -112,6 +112,7 @@ template <size_t I, class T, size_t N> c
     #include <algorithm>
     #include <stdexcept>
     #include <cstdlib> // for _LIBCPP_UNREACHABLE
    +#include <version>
     #include <__debug>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)

    Modified: libcxx/trunk/include/atomic
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/atomic?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/atomic (original)
    +++ libcxx/trunk/include/atomic Wed Sep 12 12:41:40 2018
    @@ -544,6 +544,7 @@ void atomic_signal_fence(memory_order m)
     #include <cstddef>
     #include <cstdint>
     #include <type_traits>
    +#include <version>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     #pragma GCC system_header
    @@ -559,10 +560,6 @@ void atomic_signal_fence(memory_order m)
     #error C++ standard library is incompatible with <stdatomic.h>
     #endif

    -#if _LIBCPP_STD_VER > 14
    -# define __cpp_lib_atomic_is_always_lock_free 201603L
    -#endif
    -
     #define _LIBCPP_CHECK_STORE_MEMORY_ORDER(__m) \
       _LIBCPP_DIAGNOSE_WARNING(__m == memory_order_consume || \
                                __m == memory_order_acquire || \

    Modified: libcxx/trunk/include/bit
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/bit?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/bit (original)
    +++ libcxx/trunk/include/bit Wed Sep 12 12:41:40 2018
    @@ -21,6 +21,7 @@ namespace std {
     */

     #include <__config>
    +#include <version>

     #if defined(__IBMCPP__)
     #include "support/ibm/support.h"

    Modified: libcxx/trunk/include/chrono
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/chrono?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/chrono (original)
    +++ libcxx/trunk/include/chrono Wed Sep 12 12:41:40 2018
    @@ -798,6 +798,7 @@ constexpr chrono::year
     #include <type_traits>
     #include <ratio>
     #include <limits>
    +#include <version>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     #pragma GCC system_header

    Modified: libcxx/trunk/include/cmath
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/cmath?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/cmath (original)
    +++ libcxx/trunk/include/cmath Wed Sep 12 12:41:40 2018
    @@ -303,6 +303,7 @@ long double    truncl(long double x);

     #include <__config>
     #include <math.h>
    +#include <version>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     #pragma GCC system_header

    Modified: libcxx/trunk/include/complex
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/complex?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/complex (original)
    +++ libcxx/trunk/include/complex Wed Sep 12 12:41:40 2018
    @@ -245,6 +245,7 @@ template<class T, class charT, class tra
     #include <stdexcept>
     #include <cmath>
     #include <sstream>
    +#include <version>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     #pragma GCC system_header

    Modified: libcxx/trunk/include/cstddef
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/cstddef?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/cstddef (original)
    +++ libcxx/trunk/include/cstddef Wed Sep 12 12:41:40 2018
    @@ -35,6 +35,7 @@ Types:
     */

     #include <__config>
    +#include <version>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     #pragma GCC system_header

    Modified: libcxx/trunk/include/deque
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/deque?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/deque (original)
    +++ libcxx/trunk/include/deque Wed Sep 12 12:41:40 2018
    @@ -161,6 +161,7 @@ template <class T, class Allocator>
     #include <iterator>
     #include <algorithm>
     #include <stdexcept>
    +#include <version>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     #pragma GCC system_header

    Modified: libcxx/trunk/include/exception
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/exception?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/exception (original)
    +++ libcxx/trunk/include/exception Wed Sep 12 12:41:40 2018
    @@ -81,6 +81,7 @@ template <class E> void rethrow_if_neste
     #include <cstddef>
     #include <cstdlib>
     #include <type_traits>
    +#include <version>

     #if defined(_LIBCPP_ABI_MICROSOFT) && !defined(_LIBCPP_NO_VCRUNTIME)
     #include <vcruntime_exception.h>

    Modified: libcxx/trunk/include/filesystem
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/filesystem?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/filesystem (original)
    +++ libcxx/trunk/include/filesystem Wed Sep 12 12:41:40 2018
    @@ -244,6 +244,7 @@
     #include <utility>
     #include <iomanip> // for quoted
     #include <string_view>
    +#include <version>

     #include <__debug>

    @@ -256,10 +257,6 @@ _LIBCPP_PUSH_MACROS

     #ifndef _LIBCPP_CXX03_LANG

    -#if _LIBCPP_STD_VER >= 17
    -#define __cpp_lib_filesystem 201703
    -#endif
    -
     _LIBCPP_BEGIN_NAMESPACE_FILESYSTEM

     struct _FilesystemClock {

    Modified: libcxx/trunk/include/forward_list
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/forward_list?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/forward_list (original)
    +++ libcxx/trunk/include/forward_list Wed Sep 12 12:41:40 2018
    @@ -177,6 +177,7 @@ template <class T, class Allocator>
     #include <limits>
     #include <iterator>
     #include <algorithm>
    +#include <version>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     #pragma GCC system_header

    Modified: libcxx/trunk/include/functional
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/functional?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/functional (original)
    +++ libcxx/trunk/include/functional Wed Sep 12 12:41:40 2018
    @@ -487,6 +487,7 @@ POLICY:  For non-variadic implementation
     #include <memory>
     #include <tuple>
     #include <utility>
    +#include <version>

     #include <__functional_base>

    @@ -2340,8 +2341,6 @@ bind(_Fp&& __f, _BoundArgs&&... __bound_

     #if _LIBCPP_STD_VER > 14

    -#define __cpp_lib_invoke 201411
    -
     template <class _Fn, class ..._Args>
     result_of_t<_Fn&&(_Args&&...)>
     invoke(_Fn&& __f, _Args&&... __args)

    Modified: libcxx/trunk/include/iomanip
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/iomanip?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/iomanip (original)
    +++ libcxx/trunk/include/iomanip Wed Sep 12 12:41:40 2018
    @@ -46,6 +46,7 @@ template <class charT, class traits, cla
     #include <__config>
     #include <__string>
     #include <istream>
    +#include <version>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     #pragma GCC system_header

    Modified: libcxx/trunk/include/iterator
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/iterator?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/iterator (original)
    +++ libcxx/trunk/include/iterator Wed Sep 12 12:41:40 2018
    @@ -418,6 +418,7 @@ template <class E> constexpr const E* da
     #include <type_traits>
     #include <cstddef>
     #include <initializer_list>
    +#include <version>
     #ifdef __APPLE__
     #include <Availability.h>
     #endif

    Modified: libcxx/trunk/include/list
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/list?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/list (original)
    +++ libcxx/trunk/include/list Wed Sep 12 12:41:40 2018
    @@ -181,6 +181,7 @@ template <class T, class Alloc>
     #include <iterator>
     #include <algorithm>
     #include <type_traits>
    +#include <version>

     #include <__debug>


    Modified: libcxx/trunk/include/map
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/map?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/map (original)
    +++ libcxx/trunk/include/map Wed Sep 12 12:41:40 2018
    @@ -460,6 +460,7 @@ swap(multimap<Key, T, Compare, Allocator
     #include <functional>
     #include <initializer_list>
     #include <type_traits>
    +#include <version>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     #pragma GCC system_header

    Modified: libcxx/trunk/include/memory
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/memory?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/memory (original)
    +++ libcxx/trunk/include/memory Wed Sep 12 12:41:40 2018
    @@ -667,6 +667,7 @@ void* align(size_t alignment, size_t siz
     #if !defined(_LIBCPP_HAS_NO_ATOMIC_HEADER)
     #  include <atomic>
     #endif
    +#include <version>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     #pragma GCC system_header

    Modified: libcxx/trunk/include/mutex
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/mutex?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/mutex (original)
    +++ libcxx/trunk/include/mutex Wed Sep 12 12:41:40 2018
    @@ -194,6 +194,7 @@ template<class Callable, class ...Args>
     #ifndef _LIBCPP_CXX03_LANG
     #include <tuple>
     #endif
    +#include <version>
     #include <__threading_support>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)

    Modified: libcxx/trunk/include/new
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/new?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/new (original)
    +++ libcxx/trunk/include/new Wed Sep 12 12:41:40 2018
    @@ -91,6 +91,7 @@ void  operator delete[](void* ptr, void*
     #include <exception>
     #include <type_traits>
     #include <cstddef>
    +#include <version>
     #ifdef _LIBCPP_NO_EXCEPTIONS
     #include <cstdlib>
     #endif

    Modified: libcxx/trunk/include/numeric
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/numeric?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/numeric (original)
    +++ libcxx/trunk/include/numeric Wed Sep 12 12:41:40 2018
    @@ -142,6 +142,7 @@ template <class M, class N>
     #include <iterator>
     #include <limits> // for numeric_limits
     #include <functional>
    +#include <version>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     #pragma GCC system_header

    Modified: libcxx/trunk/include/optional
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/optional?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/optional (original)
    +++ libcxx/trunk/include/optional Wed Sep 12 12:41:40 2018
    @@ -156,6 +156,7 @@ template<class T>
     #include <stdexcept>
     #include <type_traits>
     #include <utility>
    +#include <version>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     #pragma GCC system_header

    Modified: libcxx/trunk/include/regex
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/regex?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/regex (original)
    +++ libcxx/trunk/include/regex Wed Sep 12 12:41:40 2018
    @@ -769,6 +769,7 @@ typedef regex_token_iterator<wstring::co
     #include <memory>
     #include <vector>
     #include <deque>
    +#include <version>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     #pragma GCC system_header

    Modified: libcxx/trunk/include/scoped_allocator
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/scoped_allocator?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/scoped_allocator (original)
    +++ libcxx/trunk/include/scoped_allocator Wed Sep 12 12:41:40 2018
    @@ -108,6 +108,7 @@ template <class OuterA1, class OuterA2,

     #include <__config>
     #include <memory>
    +#include <version>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     #pragma GCC system_header

    Modified: libcxx/trunk/include/set
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/set?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/set (original)
    +++ libcxx/trunk/include/set Wed Sep 12 12:41:40 2018
    @@ -402,6 +402,7 @@ swap(multiset<Key, Compare, Allocator>&
     #include <__tree>
     #include <__node_handle>
     #include <functional>
    +#include <version>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     #pragma GCC system_header

    Modified: libcxx/trunk/include/shared_mutex
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/shared_mutex?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/shared_mutex (original)
    +++ libcxx/trunk/include/shared_mutex Wed Sep 12 12:41:40 2018
    @@ -124,6 +124,7 @@ template <class Mutex>
     */

     #include <__config>
    +#include <version>

     _LIBCPP_PUSH_MACROS
     #include <__undef_macros>

    Modified: libcxx/trunk/include/string
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/string?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/string (original)
    +++ libcxx/trunk/include/string Wed Sep 12 12:41:40 2018
    @@ -510,6 +510,7 @@ basic_string<char32_t> operator "" s( co
     #include <type_traits>
     #include <initializer_list>
     #include <__functional_base>
    +#include <version>
     #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     #include <cstdint>
     #endif

    Modified: libcxx/trunk/include/string_view
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/string_view?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/string_view (original)
    +++ libcxx/trunk/include/string_view Wed Sep 12 12:41:40 2018
    @@ -178,6 +178,7 @@ namespace std {
     #include <iterator>
     #include <limits>
     #include <stdexcept>
    +#include <version>
     #include <__debug>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)

    Modified: libcxx/trunk/include/tuple
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/tuple?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/tuple (original)
    +++ libcxx/trunk/include/tuple Wed Sep 12 12:41:40 2018
    @@ -141,6 +141,7 @@ template <class... Types>
     #include <type_traits>
     #include <__functional_base>
     #include <utility>
    +#include <version>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     #pragma GCC system_header

    Modified: libcxx/trunk/include/type_traits
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/type_traits?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/type_traits (original)
    +++ libcxx/trunk/include/type_traits Wed Sep 12 12:41:40 2018
    @@ -404,6 +404,7 @@ namespace std
     */
     #include <__config>
     #include <cstddef>
    +#include <version>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     #pragma GCC system_header
    @@ -4758,7 +4759,6 @@ struct __has_operator_addressof

     #if _LIBCPP_STD_VER > 14

    -#define __cpp_lib_void_t 201411
     template <class...> using void_t = void;

     # ifndef _LIBCPP_HAS_NO_VARIADICS

    Modified: libcxx/trunk/include/unordered_map
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/unordered_map?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/unordered_map (original)
    +++ libcxx/trunk/include/unordered_map Wed Sep 12 12:41:40 2018
    @@ -386,6 +386,7 @@ template <class Key, class T, class Hash
     #include <functional>
     #include <stdexcept>
     #include <tuple>
    +#include <version>

     #include <__debug>


    Modified: libcxx/trunk/include/unordered_set
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/unordered_set?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/unordered_set (original)
    +++ libcxx/trunk/include/unordered_set Wed Sep 12 12:41:40 2018
    @@ -338,6 +338,7 @@ template <class Value, class Hash, class
     #include <__hash_table>
     #include <__node_handle>
     #include <functional>
    +#include <version>

     #include <__debug>


    Modified: libcxx/trunk/include/utility
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/utility?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/utility (original)
    +++ libcxx/trunk/include/utility Wed Sep 12 12:41:40 2018
    @@ -203,6 +203,7 @@ template <size_t I>
     #include <cstddef>
     #include <cstring>
     #include <cstdint>
    +#include <version>
     #include <__debug>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)

    Modified: libcxx/trunk/include/variant
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/variant?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/variant (original)
    +++ libcxx/trunk/include/variant Wed Sep 12 12:41:40 2018
    @@ -208,6 +208,7 @@ namespace std {
     #include <type_traits>
     #include <utility>
     #include <limits>
    +#include <version>

     #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
     #pragma GCC system_header

    Modified: libcxx/trunk/include/vector
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/vector?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/vector (original)
    +++ libcxx/trunk/include/vector Wed Sep 12 12:41:40 2018
    @@ -276,6 +276,7 @@ void swap(vector<T,Allocator>& x, vector
     #include <stdexcept>
     #include <algorithm>
     #include <cstring>
    +#include <version>
     #include <__split_buffer>
     #include <__functional_base>


    Modified: libcxx/trunk/include/version
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/version?rev=342073&r1=342072&r2=342073&view=diff
    ==============================================================================
    --- libcxx/trunk/include/version (original)
    +++ libcxx/trunk/include/version Wed Sep 12 12:41:40 2018
    @@ -101,4 +101,17 @@ __cpp_lib_void_t
     #pragma GCC system_header
     #endif

    +#if _LIBCPP_STD_VER > 11
    +#endif
    +
    +#if _LIBCPP_STD_VER > 14
    +# define __cpp_lib_atomic_is_always_lock_free           201603L
    +# define __cpp_lib_filesystem                           201703L
    +# define __cpp_lib_invoke                               201411L
    +# define __cpp_lib_void_t                               201411L
    +#endif
    +
    +#if _LIBCPP_STD_VER > 17
    +#endif
    +
     #endif  // _LIBCPP_VERSIONH

    Added: libcxx/trunk/test/std/language.support/support.limits/support.limits.general/algorithm.version.pass.cpp
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.limits/support.limits.general/algorithm.version.pass.cpp?rev=342073&view=auto
    ==============================================================================
    --- libcxx/trunk/test/std/language.support/support.limits/support.limits.general/algorithm.version.pass.cpp (added)
    +++ libcxx/trunk/test/std/language.support/support.limits/support.limits.general/algorithm.version.pass.cpp Wed Sep 12 12:41:40 2018
    @@ -0,0 +1,36 @@
    +
    +//===----------------------------------------------------------------------===//
    +//
    +//                     The LLVM Compiler Infrastructure
    +//
    +// This file is dual licensed under the MIT and the University of Illinois Open
    +// Source Licenses. See LICENSE.TXT for details.
    +//
    +//===----------------------------------------------------------------------===//
    +//
    +// <algorithm> feature macros
    +
    +/*  Constant                                    Value
    +    __cpp_lib_clamp                             201603L
    +    __cpp_lib_constexpr_swap_algorithms         201806L
    +    __cpp_lib_parallel_algorithm                201603L
    +    __cpp_lib_robust_nonmodifying_seq_ops       201304L
    +    __cpp_lib_sample                            201603L
    +
    +*/
    +
    +#include <algorithm>
    +#include "test_macros.h"
    +
    +int main()
    +{
    +//  ensure that the macros that are supposed to be defined in <algorithm> are defined.
    +
    +/*
    +#if !defined(__cpp_lib_fooby)
    +# error "__cpp_lib_fooby is not defined"
    +#elif __cpp_lib_fooby < 201606L
    +# error "__cpp_lib_fooby has an invalid value"
    +#endif
    +*/
    +}

    Added: libcxx/trunk/test/std/language.support/support.limits/support.limits.general/any.version.pass.cpp
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.limits/support.limits.general/any.version.pass.cpp?rev=342073&view=auto
    ==============================================================================
    --- libcxx/trunk/test/std/language.support/support.limits/support.limits.general/any.version.pass.cpp (added)
    +++ libcxx/trunk/test/std/language.support/support.limits/support.limits.general/any.version.pass.cpp Wed Sep 12 12:41:40 2018
    @@ -0,0 +1,32 @@
    +
    +//===----------------------------------------------------------------------===//
    +//
    +//                     The LLVM Compiler Infrastructure
    +//
    +// This file is dual licensed under the MIT and the University of Illinois Open
    +// Source Licenses. See LICENSE.TXT for details.
    +//
    +//===----------------------------------------------------------------------===//
    +//
    +// <any> feature macros
    +
    +/*  Constant                                    Value
    +    __cpp_lib_any                               201606L
    +
    +*/
    +
    +#include <any>
    +#include "test_macros.h"
    +
    +int main()
    +{
    +//  ensure that the macros that are supposed to be defined in <any> are defined.
    +
    +/*
    +#if !defined(__cpp_lib_fooby)
    +# error "__cpp_lib_fooby is not defined"
    +#elif __cpp_lib_fooby < 201606L
    +# error "__cpp_lib_fooby has an invalid value"
    +#endif
    +*/
    +}

    Added: libcxx/trunk/test/std/language.support/support.limits/support.limits.general/array.version.pass.cpp
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.limits/support.limits.general/array.version.pass.cpp?rev=342073&view=auto
    ==============================================================================
    --- libcxx/trunk/test/std/language.support/support.limits/support.limits.general/array.version.pass.cpp (added)
    +++ libcxx/trunk/test/std/language.support/support.limits/support.limits.general/array.version.pass.cpp Wed Sep 12 12:41:40 2018
    @@ -0,0 +1,33 @@
    +
    +//===----------------------------------------------------------------------===//
    +//
    +//                     The LLVM Compiler Infrastructure
    +//
    +// This file is dual licensed under the MIT and the University of Illinois Open
    +// Source Licenses. See LICENSE.TXT for details.
    +//
    +//===----------------------------------------------------------------------===//
    +//
    +// <array> feature macros
    +
    +/*  Constant                                    Value
    +    __cpp_lib_array_constexpr                   201603L
    +    __cpp_lib_nonmember_container_access        201411L
    +
    +*/
    +
    +#include <array>
    +#include "test_macros.h"
    +
    +int main()
    +{
    +//  ensure that the macros that are supposed to be defined in <array> are defined.
    +
    +/*
    +#if !defined(__cpp_lib_fooby)
    +# error "__cpp_lib_fooby is not defined"
    +#elif __cpp_lib_fooby < 201606L
    +# error "__cpp_lib_fooby has an invalid value"
    +#endif
    +*/
    +}

    Added: libcxx/trunk/test/std/language.support/support.limits/support.limits.general/atomic.version.pass.cpp
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.limits/support.limits.general/atomic.version.pass.cpp?rev=342073&view=auto
    ==============================================================================
    --- libcxx/trunk/test/std/language.support/support.limits/support.limits.general/atomic.version.pass.cpp (added)
    +++ libcxx/trunk/test/std/language.support/support.limits/support.limits.general/atomic.version.pass.cpp Wed Sep 12 12:41:40 2018
    @@ -0,0 +1,41 @@
    +
    +//===----------------------------------------------------------------------===//
    +//
    +//                     The LLVM Compiler Infrastructure
    +//
    +// This file is dual licensed under the MIT and the University of Illinois Open
    +// Source Licenses. See LICENSE.TXT for details.
    +//
    +//===----------------------------------------------------------------------===//
    +//
    +// <atomic> feature macros
    +
    +/*  Constant                                    Value
    +    __cpp_lib_atomic_is_always_lock_free        201603L
    +    __cpp_lib_atomic_ref                        201806L
    +
    +*/
    +
    +#include <atomic>
    +#include "test_macros.h"
    +
    +int main()
    +{
    +//  ensure that the macros that are supposed to be defined in <atomic> are defined.
    +
    +#if _TEST_STD_VER > 14
    +# if !defined(__cpp_lib_atomic_is_always_lock_free)
    +#  error "__cpp_lib_atomic_is_always_lock_free is not defined"
    +# elif __cpp_lib_atomic_is_always_lock_free < 201603L
    +#  error "__cpp_lib_atomic_is_always_lock_free has an invalid value"
    +# endif
    +#endif
    +
    +/*
    +#if !defined(__cpp_lib_fooby)
    +# error "__cpp_lib_fooby is not defined"
    +#elif __cpp_lib_fooby < 201606L
    +# error "__cpp_lib_fooby has an invalid value"
    +#endif
    +*/
    +}

    Added: libcxx/trunk/test/std/language.support/support.limits/support.limits.general/bit.version.pass.cpp
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.limits/support.limits.general/bit.version.pass.cpp?rev=342073&view=auto
    ==============================================================================
    --- libcxx/trunk/test/std/language.support/support.limits/support.limits.general/bit.version.pass.cpp (added)
    +++ libcxx/trunk/test/std/language.support/support.limits/support.limits.general/bit.version.pass.cpp Wed Sep 12 12:41:40 2018
    @@ -0,0 +1,32 @@
    +
    +//===----------------------------------------------------------------------===//
    +//
    +//                     The LLVM Compiler Infrastructure
    +//
    +// This file is dual licensed under the MIT and the University of Illinois Open
    +// Source Licenses. See LICENSE.TXT for details.
    +//
    +//===----------------------------------------------------------------------===//
    +//
    +// <bit> feature macros
    +
    +/*  Constant                                    Value
    +    __cpp_lib_bit_cast                          201806L
    +
    +*/
    +
    +#include <bit>
    +#include "test_macros.h"
    +
    +int main()
    +{
    +//  ensure that the macros that are supposed to be defined in <bit> are defined.
    +
    +/*
    +#if !defined(__cpp_lib_fooby)
    +# error "__cpp_lib_fooby is not defined"
    +#elif __cpp_lib_fooby < 201606L
    +# error "__cpp_lib_fooby has an invalid value"
    +#endif
    +*/
    +}

    Added: libcxx/trunk/test/std/language.support/support.limits/support.limits.general/chrono.version.pass.cpp
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.limits/support.limits.general/chrono.version.pass.cpp?rev=342073&view=auto
    ==============================================================================
    --- libcxx/trunk/test/std/language.support/support.limits/support.limits.general/chrono.version.pass.cpp (added)
    +++ libcxx/trunk/test/std/language.support/support.limits/support.limits.general/chrono.version.pass.cpp Wed Sep 12 12:41:40 2018
    @@ -0,0 +1,32 @@
    +
    +//===----------------------------------------------------------------------===//
    +//
    +//                     The LLVM Compiler Infrastructure
    +//
    +// This file is dual licensed under the MIT and the University of Illinois Open
    +// Source Licenses. See LICENSE.TXT for details.
    +//
    +//===----------------------------------------------------------------------===//
    +//
    +// <chrono> feature macros
    +
    +/*  Constant                                    Value
    +    __cpp_lib_chrono                            201611L
    +
    +*/
    +
    +#include <chrono>
    +#include "test_macros.h"
    +
    +int main()
    +{
    +//  ensure that the macros that are supposed to be defined in <chrono> are defined.
    +
    +/*
    +#if !defined(__cpp_lib_fooby)
    +# error "__cpp_lib_fooby is not defined"
    +#elif __cpp_lib_fooby < 201606L
    +# error "__cpp_lib_fooby has an invalid value"
    +#endif
    +*/
    +}

    Added: libcxx/trunk/test/std/language.support/support.limits/support.limits.general/cmath.version.pass.cpp
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.limits/support.limits.general/cmath.version.pass.cpp?rev=342073&view=auto
    ==============================================================================
    --- libcxx/trunk/test/std/language.support/support.limits/support.limits.general/cmath.version.pass.cpp (added)
    +++ libcxx/trunk/test/std/language.support/support.limits/support.limits.general/cmath.version.pass.cpp Wed Sep 12 12:41:40 2018
    @@ -0,0 +1,33 @@
    +
    +//===----------------------------------------------------------------------===//
    +//
    +//                     The LLVM Compiler Infrastructure
    +//
    +// This file is dual licensed under the MIT and the University of Illinois Open
    +// Source Licenses. See LICENSE.TXT for details.
    +//
    +//===----------------------------------------------------------------------===//
    +//
    +// <cmath> feature macros
    +
    +/*  Constant                                    Value
    +    __cpp_lib_hypot                             201603L
    +    __cpp_lib_math_special_functions            201603L
    +
    +*/
    +
    +#include <cmath>
    +#include "test_macros.h"
    +
    +int main()
    +{
    +//  ensure that the macros that are supposed to be defined in <cmath> are defined.
    +
    +/*
    +#if !defined(__cpp_lib_fooby)
    +# error "__cpp_lib_fooby is not defined"
    +#elif __cpp_lib_fooby < 201606L
    +# error "__cpp_lib_fooby has an invalid value"
    +#endif
    +*/
    +}

    Added: libcxx/trunk/test/std/language.support/support.limits/support.limits.general/complex.version.pass.cpp
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.limits/support.limits.general/complex.version.pass.cpp?rev=342073&view=auto
    ==============================================================================
    --- libcxx/trunk/test/std/language.support/support.limits/support.limits.general/complex.version.pass.cpp (added)
    +++ libcxx/trunk/test/std/language.support/support.limits/support.limits.general/complex.version.pass.cpp Wed Sep 12 12:41:40 2018
    @@ -0,0 +1,32 @@
    +
    +//===----------------------------------------------------------------------===//
    +//
    +//                     The LLVM Compiler Infrastructure
    +//
    +// This file is dual licensed under the MIT and the University of Illinois Open
    +// Source Licenses. See LICENSE.TXT for details.
    +//
    +//===----------------------------------------------------------------------===//
    +//
    +// <complex> feature macros
    +
    +/*  Constant                                    Value
    +    __cpp_lib_complex_udls                      201309L
    +
    +*/
    +
    +#include <complex>
    +#include "test_macros.h"
    +
    +int main()
    +{
    +//  ensure that the macros that are supposed to be defined in <complex> are defined.
    +
    +/*
    +#if !defined(__cpp_lib_fooby)
    +# error "__cpp_lib_fooby is not defined"
    +#elif __cpp_lib_fooby < 201606L
    +# error "__cpp_lib_fooby has an invalid value"
    +#endif
    +*/
    +}

    Added: libcxx/trunk/test/std/language.support/support.limits/support.limits.general/concepts.version.pass.cpp
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.limits/support.limits.general/concepts.version.pass.cpp?rev=342073&view=auto
    ==============================================================================
    --- libcxx/trunk/test/std/language.support/support.limits/support.limits.general/concepts.version.pass.cpp (added)
    +++ libcxx/trunk/test/std/language.support/support.limits/support.limits.general/concepts.version.pass.cpp Wed Sep 12 12:41:40 2018
    @@ -0,0 +1,33 @@
    +
    +//===----------------------------------------------------------------------===//
    +//
    +//                     The LLVM Compiler Infrastructure
    +//
    +// This file is dual licensed under the MIT and the University of Illinois Open
    +// Source Licenses. See LICENSE.TXT for details.
    +//
    +//===----------------------------------------------------------------------===//
    +//
    +// <concepts> feature macros
    +
    +/*  Constant                                    Value
    +    __cpp_lib_concepts                          201806L
    +
    +*/
    +
    +// XFAIL
    +// #include <concepts>
    +#include "test_macros.h"
    +
    +int main()
    +{
    +//  ensure that the macros that are supposed to be defined in <concepts> are defined.
    +
    +/*
    +#if !defined(__cpp_lib_fooby)
    +# error "__cpp_lib_fooby is not defined"
    +#elif __cpp_lib_fooby < 201606L
    +# error "__cpp_lib_fooby has an invalid value"
    +#endif
    +*/
    +}

    Added: libcxx/trunk/test/std/language.support/support.limits/support.limits.general/cstddef.version.pass.cpp
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.limits/support.limits.general/cstddef.version.pass.cpp?rev=342073&view=auto
    ==============================================================================
    --- libcxx/trunk/test/std/language.support/support.limits/support.limits.general/cstddef.version.pass.cpp (added)
    +++ libcxx/trunk/test/std/language.support/support.limits/support.limits.general/cstddef.version.pass.cpp Wed Sep 12 12:41:40 2018
    @@ -0,0 +1,32 @@
    +
    +//===----------------------------------------------------------------------===//
    +//
    +//                     The LLVM Compiler Infrastructure
    +//
    +// This file is dual licensed under the MIT and the University of Illinois Open
    +// Source Licenses. See LICENSE.TXT for details.
    +//
    +//===----------------------------------------------------------------------===//
    +//
    +// <cstddef> feature macros
    +
    +/*  Constant                                    Value
    +    __cpp_lib_byte                              201603L
    +
    +*/
    +
    +#include <cstddef>
    +#include "test_macros.h"
    +
    +int main()
    +{
    +//  ensure that the macros that are supposed to be defined in <cstddef> are defined.
    +
    +/*
    +#if !defined(__cpp_lib_fooby)
    +# error "__cpp_lib_fooby is not defined"
    +#elif __cpp_lib_fooby < 201606L
    +# error "__cpp_lib_fooby has an invalid value"
    +#endif
    +*/
    +}

    Added: libcxx/trunk/test/std/language.support/support.limits/support.limits.general/deque.version.pass.cpp
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.limits/support.limits.general/deque.version.pass.cpp?rev=342073&view=auto
    ==============================================================================
    --- libcxx/trunk/test/std/language.support/support.limits/support.limits.general/deque.version.pass.cpp (added)
    +++ libcxx/trunk/test/std/language.support/support.limits/support.limits.general/deque.version.pass.cpp Wed Sep 12 12:41:40 2018
    @@ -0,0 +1,33 @@
    +
    +//===----------------------------------------------------------------------===//
    +//
    +//                     The LLVM Compiler Infrastructure
    +//
    +// This file is dual licensed under the MIT and the University of Illinois Open
    +// Source Licenses. See LICENSE.TXT for details.
    +//
    +//===----------------------------------------------------------------------===//
    +//
    +// <deque> feature macros
    +
    +/*  Constant                                    Value
    +    __cpp_lib_allocator_traits_is_always_equal  201411L
    +    __cpp_lib_nonmember_container_access        201411L
    +
    +*/
    +
    +#include <deque>
    +#include "test_macros.h"
    +
    +int main()
    +{
    +//  ensure that the macros that are supposed to be defined in <deque> are defined.
    +
    +/*
    +#if !defined(__cpp_lib_fooby)
    +# error "__cpp_lib_fooby is not defined"
    +#elif __cpp_lib_fooby < 201606L
    +# error "__cpp_lib_fooby has an invalid value"
    +#endif
    +*/
    +}

    Added: libcxx/trunk/test/std/language.support/support.limits/support.limits.general/exception.version.pass.cpp
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.limits/support.limits.general/exception.version.pass.cpp?rev=342073&view=auto
    ==============================================================================
    --- libcxx/trunk/test/std/language.support/support.limits/support.limits.general/exception.version.pass.cpp (added)
    +++ libcxx/trunk/test/std/language.support/support.limits/support.limits.general/exception.version.pass.cpp Wed Sep 12 12:41:40 2018
    @@ -0,0 +1,32 @@
    +
    +//===----------------------------------------------------------------------===//
    +//
    +//                     The LLVM Compiler Infrastructure
    +//
    +// This file is dual licensed under the MIT and the University of Illinois Open
    +// Source Licenses. See LICENSE.TXT for details.
    +//
    +//===----------------------------------------------------------------------===//
    +//
    +// <exception> feature macros
    +
    +/*  Constant                                    Value
    +    __cpp_lib_uncaught_exceptions               201411L
    +
    +*/
    +
    +#include <exception>
    +#include "test_macros.h"
    +
    +int main()
    +{
    +//  ensure that the macros that are supposed to be defined in <exception> are defined.
    +
    +/*
    +#if !defined(__cpp_lib_fooby)
    +# error "__cpp_lib_fooby is not defined"
    +#elif __cpp_lib_fooby < 201606L
    +# error "__cpp_lib_fooby has an invalid value"
    +#endif
    +*/
    +}

    Added: libcxx/trunk/test/std/language.support/support.limits/support.limits.general/execution.version.pass.cpp
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.limits/support.limits.general/execution.version.pass.cpp?rev=342073&view=auto
    ==============================================================================
    --- libcxx/trunk/test/std/language.support/support.limits/support.limits.general/execution.version.pass.cpp (added)
    +++ libcxx/trunk/test/std/language.support/support.limits/support.limits.general/execution.version.pass.cpp Wed Sep 12 12:41:40 2018
    @@ -0,0 +1,33 @@
    +
    +//===----------------------------------------------------------------------===//
    +//
    +//                     The LLVM Compiler Infrastructure
    +//
    +// This file is dual licensed under the MIT and the University of Illinois Open
    +// Source Licenses. See LICENSE.TXT for details.
    +//
    +//===----------------------------------------------------------------------===//
    +//
    +// <execution> feature macros
    +
    +/*  Constant                                    Value
    +    __cpp_lib_execution                         201603L
    +
    +*/
    +
    +// XFAIL
    +// #include <execution>
    +#include "test_macros.h"
    +
    +int main()
    +{
    +//  ensure that the macros that are supposed to be defined in <execution> are defined.
    +
    +/*
    +#if !defined(__cpp_lib_fooby)
    +# error "__cpp_lib_fooby is not defined"
    +#elif __cpp_lib_fooby < 201606L
    +# error "__cpp_lib_fooby has an invalid value"
    +#endif
    +*/
    +}

    Added: libcxx/trunk/test/std/language.support/support.limits/support.limits.general/filesystem.version.pass.cpp
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.limits/support.limits.general/filesystem.version.pass.cpp?rev=342073&view=auto
    ==============================================================================
    --- libcxx/trunk/test/std/language.support/support.limits/support.limits.general/filesystem.version.pass.cpp (added)
    +++ libcxx/trunk/test/std/language.support/support.limits/support.limits.general/filesystem.version.pass.cpp Wed Sep 12 12:41:40 2018
    @@ -0,0 +1,40 @@
    +
    +//===----------------------------------------------------------------------===//
    +//
    +//                     The LLVM Compiler Infrastructure
    +//
    +// This file is dual licensed under the MIT and the University of Illinois Open
    +// Source Licenses. See LICENSE.TXT for details.
    +//
    +//===----------------------------------------------------------------------===//
    +//
    +// <filesystem> feature macros
    +
    +/*  Constant                                    Value
    +    __cpp_lib_filesystem                        201703L
    +
    +*/
    +
    +#include <filesystem>
    +#include "test_macros.h"
    +
    +int main()
    +{
    +//  ensure that the macros that are supposed to be defined in <filesystem> are defined.
    +
    +#if _TEST_STD_VER > 14
    +# if !defined(__cpp_lib_filesystem)
    +#  error "__cpp_lib_filesystem is not defined"
    +# elif __cpp_lib_filesystem < 201703L
    +#  error "__cpp_lib_filesystem has an invalid value"
    +# endif
    +#endif
    +
    +/*
    +#if !defined(__cpp_lib_fooby)
    +# error "__cpp_lib_fooby is not defined"
    +#elif __cpp_lib_fooby < 201606L
    +# error "__cpp_lib_fooby has an invalid value"
    +#endif
    +*/
    +}

    Added: libcxx/trunk/test/std/language.support/support.limits/support.limits.general/forward_list.version.pass.cpp
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.limits/support.limits.general/forward_list.version.pass.cpp?rev=342073&view=auto
    ==============================================================================
    --- libcxx/trunk/test/std/language.support/support.limits/support.limits.general/forward_list.version.pass.cpp (added)
    +++ libcxx/trunk/test/std/language.support/support.limits/support.limits.general/forward_list.version.pass.cpp Wed Sep 12 12:41:40 2018
    @@ -0,0 +1,35 @@
    +
    +//===----------------------------------------------------------------------===//
    +//
    +//                     The LLVM Compiler Infrastructure
    +//
    +// This file is dual licensed under the MIT and the University of Illinois Open
    +// Source Licenses. See LICENSE.TXT for details.
    +//
    +//===----------------------------------------------------------------------===//
    +//
    +// <forward_list> feature macros
    +
    +/*  Constant                                    Value
    +    __cpp_lib_allocator_traits_is_always_equal  201411L
    +    __cpp_lib_incomplete_container_elements     201505L
    +    __cpp_lib_list_remove_return_type           201806L
    +    __cpp_lib_nonmember_container_access        201411L
    +
    +*/
    +
    +#include <forward_list>
    +#include "test_macros.h"
    +
    +int main()
    +{
    +//  ensure that the macros that are supposed to be defined in <forward_list> are defined.
    +
    +/*
    +#if !defined(__cpp_lib_fooby)
    +# error "__cpp_lib_fooby is not defined"
    +#elif __cpp_lib_fooby < 201606L
    +# error "__cpp_lib_fooby has an invalid value"
    +#endif
    +*/
    +}

    Added: libcxx/trunk/test/std/language.support/support.limits/support.limits.general/functional.version.pass.cpp
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.limits/support.limits.general/functional.version.pass.cpp?rev=342073&view=auto
    ==============================================================================
    --- libcxx/trunk/test/std/language.support/support.limits/support.limits.general/functional.version.pass.cpp (added)
    +++ libcxx/trunk/test/std/language.support/support.limits/support.limits.general/functional.version.pass.cpp Wed Sep 12 12:41:40 2018
    @@ -0,0 +1,44 @@
    +
    +//===----------------------------------------------------------------------===//
    +//
    +//                     The LLVM Compiler Infrastructure
    +//
    +// This file is dual licensed under the MIT and the University of Illinois Open
    +// Source Licenses. See LICENSE.TXT for details.
    +//
    +//===----------------------------------------------------------------------===//
    +//
    +// <functional> feature macros
    +
    +/*  Constant                                    Value
    +    __cpp_lib_boyer_moore_searcher              201603L
    +    __cpp_lib_invoke                            201411L
    +    __cpp_lib_not_fn                            201603L
    +    __cpp_lib_result_of_sfinae                  201210L
    +    __cpp_lib_transparent_operators             201510L
    +
    +*/
    +
    +#include <functional>
    +#include "test_macros.h"
    +
    +int main()
    +{
    +//  ensure that the macros that are supposed to be defined in <functional> are defined.
    +
    +#if _TEST_STD_VER > 14
    +# if !defined(__cpp_lib_invoke)
    +#  error "__cpp_lib_invoke is not defined"
    +# elif __cpp_lib_invoke < 201411L
    +#  error "__cpp_lib_invoke has an invalid value"
    +# endif
    +#endif
    +
    +/*
    +#if !defined(__cpp_lib_fooby)
    +# error "__cpp_lib_fooby is not defined"
    +#elif __cpp_lib_fooby < 201606L
    +# error "__cpp_lib_fooby has an invalid value"
    +#endif
    +*/
    +}

    Added: libcxx/trunk/test/std/language.support/support.limits/support.limits.general/iomanip.version.pass.cpp
    URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.limits/support.limits.general/iomanip.version.pass.cpp?rev=342073&view=auto
    ==============================================================================
    --- libcxx/trunk/test/std/language.support/support.limits/support.limits.general/iomanip.version.pass.cpp (added)
    +++ libcxx/trunk/test/std/language.support/support.limits/support.limits.general/iomanip.version.pass.cpp Wed Sep 12 12:41:40 2018
    @@ -0,0 +1,32 @@
    +
    +//===----------------------------------------------------------------------==
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20181003/c4e5b8e5/attachment-0001.html>


More information about the cfe-commits mailing list