[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