[libcxx-commits] [libcxx] r372832 - Revert r372777: [libc++] Implement LWG 2510 and its follow-ups

Ilya Biryukov via libcxx-commits libcxx-commits at lists.llvm.org
Wed Sep 25 02:10:39 PDT 2019


Author: ibiryukov
Date: Wed Sep 25 02:10:38 2019
New Revision: 372832

URL: http://llvm.org/viewvc/llvm-project?rev=372832&view=rev
Log:
Revert r372777: [libc++] Implement LWG 2510 and its follow-ups

This also reverts:
 - r372778: [libc++] Implement LWG 3158
 - r372782: [libc++] Try fixing tests that fail on GCC 5 and older
 - r372787: Purge mentions of GCC 4 from the test suite

Reason: the change breaks compilation of LLVM with libc++, for details see
http://lists.llvm.org/pipermail/libcxx-dev/2019-September/000599.html

Removed:
    libcxx/trunk/test/libcxx/type_traits/is_implicitly_default_constructible.pass.cpp
    libcxx/trunk/test/std/language.support/support.dynamic/nothrow_t.fail.cpp
    libcxx/trunk/test/std/language.support/support.dynamic/nothrow_t.pass.cpp
    libcxx/trunk/test/std/thread/thread.mutex/thread.lock/types.fail.cpp
    libcxx/trunk/test/std/utilities/memory/allocator.tag/allocator_arg.fail.cpp
    libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/alloc.fail.cpp
    libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/default.fail.cpp
    libcxx/trunk/test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct_t.fail.cpp
    libcxx/trunk/test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct_t.pass.cpp
    libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/default.explicit.fail.cpp
Modified:
    libcxx/trunk/include/__functional_base
    libcxx/trunk/include/__mutex_base
    libcxx/trunk/include/mutex
    libcxx/trunk/include/new
    libcxx/trunk/include/tuple
    libcxx/trunk/include/type_traits
    libcxx/trunk/include/utility
    libcxx/trunk/src/mutex.cpp
    libcxx/trunk/src/utility.cpp
    libcxx/trunk/test/libcxx/diagnostics/enable_nodiscard.fail.cpp
    libcxx/trunk/test/libcxx/diagnostics/enable_nodiscard_disable_after_cxx17.fail.cpp
    libcxx/trunk/test/libcxx/diagnostics/enable_nodiscard_disable_nodiscard_ext.fail.cpp
    libcxx/trunk/test/libcxx/diagnostics/nodiscard_extensions.fail.cpp
    libcxx/trunk/test/libcxx/utilities/utility/pairs/pairs.pair/non_trivial_copy_move_ABI.pass.cpp
    libcxx/trunk/test/libcxx/utilities/utility/pairs/pairs.pair/trivial_copy_move_ABI.pass.cpp
    libcxx/trunk/test/std/experimental/simd/simd.cons/broadcast.pass.cpp
    libcxx/trunk/test/std/experimental/simd/simd.cons/generator.pass.cpp
    libcxx/trunk/test/std/iterators/stream.iterators/istream.iterator/types.pass.cpp
    libcxx/trunk/test/std/iterators/stream.iterators/istreambuf.iterator/types.pass.cpp
    libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp
    libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp
    libcxx/trunk/test/std/thread/thread.mutex/thread.lock/types.pass.cpp
    libcxx/trunk/test/std/utilities/function.objects/refwrap/type_properties.pass.cpp
    libcxx/trunk/test/std/utilities/memory/allocator.tag/allocator_arg.pass.cpp
    libcxx/trunk/test/std/utilities/memory/specialized.algorithms/specialized.addressof/constexpr_addressof.pass.cpp
    libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/has_unique_object_representations.pass.cpp
    libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_assignable.pass.cpp
    libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_assignable.pass.cpp
    libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_constructible.pass.cpp
    libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_assignable.pass.cpp
    libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_constructible.pass.cpp
    libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/alloc.pass.cpp
    libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/default.pass.cpp
    libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_incomplete.pass.cpp
    libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_value_sfinae.pass.cpp
    libcxx/trunk/test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct.pass.cpp
    libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/default.pass.cpp
    libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp
    libcxx/trunk/test/support/test.workarounds/c1xx_broken_is_trivially_copyable.pass.cpp
    libcxx/trunk/www/cxx1z_status.html
    libcxx/trunk/www/cxx2a_status.html
    libcxx/trunk/www/upcoming_meeting.html

Modified: libcxx/trunk/include/__functional_base
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__functional_base?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/include/__functional_base (original)
+++ libcxx/trunk/include/__functional_base Wed Sep 25 02:10:38 2019
@@ -558,7 +558,7 @@ struct __is_transparent<_Tp, _Up,
 
 // allocator_arg_t
 
-struct _LIBCPP_TEMPLATE_VIS allocator_arg_t { explicit allocator_arg_t() = default; };
+struct _LIBCPP_TEMPLATE_VIS allocator_arg_t { };
 
 #if defined(_LIBCPP_CXX03_LANG) || defined(_LIBCPP_BUILDING_LIBRARY)
 extern _LIBCPP_EXPORTED_FROM_ABI const allocator_arg_t allocator_arg;

Modified: libcxx/trunk/include/__mutex_base
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__mutex_base?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/include/__mutex_base (original)
+++ libcxx/trunk/include/__mutex_base Wed Sep 25 02:10:38 2019
@@ -66,9 +66,9 @@ public:
 static_assert(is_nothrow_default_constructible<mutex>::value,
               "the default constructor for std::mutex must be nothrow");
 
-struct _LIBCPP_TYPE_VIS defer_lock_t { explicit defer_lock_t() = default; };
-struct _LIBCPP_TYPE_VIS try_to_lock_t { explicit try_to_lock_t() = default; };
-struct _LIBCPP_TYPE_VIS adopt_lock_t { explicit adopt_lock_t() = default; };
+struct _LIBCPP_TYPE_VIS defer_lock_t {};
+struct _LIBCPP_TYPE_VIS try_to_lock_t {};
+struct _LIBCPP_TYPE_VIS adopt_lock_t {};
 
 #if defined(_LIBCPP_CXX03_LANG) || defined(_LIBCPP_BUILDING_LIBRARY)
 

Modified: libcxx/trunk/include/mutex
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/mutex?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/include/mutex (original)
+++ libcxx/trunk/include/mutex Wed Sep 25 02:10:38 2019
@@ -86,9 +86,9 @@ public:
     void unlock();
 };
 
-struct defer_lock_t { explicit defer_lock_t() = default; };
-struct try_to_lock_t { explicit try_to_lock_t() = default; };
-struct adopt_lock_t { explicit adopt_lock_t() = default; };
+struct defer_lock_t {};
+struct try_to_lock_t {};
+struct adopt_lock_t {};
 
 inline constexpr defer_lock_t  defer_lock{};
 inline constexpr try_to_lock_t try_to_lock{};

Modified: libcxx/trunk/include/new
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/new?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/include/new (original)
+++ libcxx/trunk/include/new Wed Sep 25 02:10:38 2019
@@ -39,7 +39,7 @@ struct destroying_delete_t { // C++20
 };
 inline constexpr destroying_delete_t destroying_delete{}; // C++20
 
-struct nothrow_t { explicit nothrow_t() = default; };
+struct nothrow_t {};
 extern const nothrow_t nothrow;
 typedef void (*new_handler)();
 new_handler set_new_handler(new_handler new_p) noexcept;
@@ -126,7 +126,7 @@ namespace std  // purposefully not using
 {
 
 #if !defined(_LIBCPP_ABI_VCRUNTIME)
-struct _LIBCPP_TYPE_VIS nothrow_t { explicit nothrow_t() = default; };
+struct _LIBCPP_TYPE_VIS nothrow_t {};
 extern _LIBCPP_FUNC_VIS const nothrow_t nothrow;
 
 class _LIBCPP_EXCEPTION_ABI bad_alloc

Modified: libcxx/trunk/include/tuple
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/tuple?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/include/tuple (original)
+++ libcxx/trunk/include/tuple Wed Sep 25 02:10:38 2019
@@ -19,7 +19,7 @@ namespace std
 template <class... T>
 class tuple {
 public:
-    explicit(see-below) constexpr tuple();
+    constexpr tuple();
     explicit(see-below) tuple(const T&...);  // constexpr in C++14
     template <class... U>
         explicit(see-below) tuple(U&&...);  // constexpr in C++14
@@ -500,22 +500,9 @@ class _LIBCPP_TEMPLATE_VIS tuple
     struct _CheckArgsConstructor<true, _Dummy>
     {
         template <class ..._Args>
-        struct __enable_implicit_default
-            // In C++03, there's no way to implement the resolution of LWG2510.
-#ifdef _LIBCPP_CXX03_LANG
-            : true_type
-#else
-            : __all<__is_implicitly_default_constructible<_Args>::value...>
-#endif
-        { };
-
-        template <class ..._Args>
-        struct __enable_explicit_default
-            : integral_constant<bool,
-                __all<is_default_constructible<_Args>::value...>::value &&
-                !__enable_implicit_default<_Args...>::value
-            >
-        { };
+        static constexpr bool __enable_default() {
+            return __all<is_default_constructible<_Args>::value...>::value;
+        }
 
         template <class ..._Args>
         static constexpr bool __enable_explicit() {
@@ -654,48 +641,27 @@ class _LIBCPP_TEMPLATE_VIS tuple
         const typename tuple_element<_Jp, tuple<_Up...> >::type&& get(const tuple<_Up...>&&) _NOEXCEPT;
 public:
 
-    template <bool _Dummy = true, _EnableIf<
-        _CheckArgsConstructor<_Dummy>::template __enable_implicit_default<_Tp...>::value
-    , void*> = nullptr>
-    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
-    tuple()
-        _NOEXCEPT_(__all<is_nothrow_default_constructible<_Tp>::value...>::value) {}
-
-    template <bool _Dummy = true, _EnableIf<
-        _CheckArgsConstructor<_Dummy>::template __enable_explicit_default<_Tp...>::value
-    , void*> = nullptr>
-    explicit _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
-    tuple()
+    template <bool _Dummy = true, class = typename enable_if<
+        _CheckArgsConstructor<_Dummy>::template __enable_default<_Tp...>()
+    >::type>
+    _LIBCPP_INLINE_VISIBILITY
+    _LIBCPP_CONSTEXPR tuple()
         _NOEXCEPT_(__all<is_nothrow_default_constructible<_Tp>::value...>::value) {}
 
     tuple(tuple const&) = default;
     tuple(tuple&&) = default;
 
-    template <class _AllocArgT, class _Alloc, bool _Dummy = true, _EnableIf<
+    template <class _AllocArgT, class _Alloc, bool _Dummy = true, class = _EnableIf<
         _And<
             _IsSame<allocator_arg_t, _AllocArgT>,
-            typename _CheckArgsConstructor<_Dummy>::template __enable_implicit_default<_Tp...>
+           __dependent_type<is_default_constructible<_Tp>, _Dummy>...
        >::value
-      , void*> = nullptr
+      >
     >
     _LIBCPP_INLINE_VISIBILITY
     tuple(_AllocArgT, _Alloc const& __a)
       : __base_(allocator_arg_t(), __a,
                     __tuple_indices<>(), __tuple_types<>(),
-                    typename __make_tuple_indices<sizeof...(_Tp), 0>::type(),
-                    __tuple_types<_Tp...>()) {}
-
-    template <class _AllocArgT, class _Alloc, bool _Dummy = true, _EnableIf<
-        _And<
-            _IsSame<allocator_arg_t, _AllocArgT>,
-            typename _CheckArgsConstructor<_Dummy>::template __enable_explicit_default<_Tp...>
-       >::value
-      , void*> = nullptr
-    >
-    explicit _LIBCPP_INLINE_VISIBILITY
-    tuple(_AllocArgT, _Alloc const& __a)
-      : __base_(allocator_arg_t(), __a,
-                    __tuple_indices<>(), __tuple_types<>(),
                     typename __make_tuple_indices<sizeof...(_Tp), 0>::type(),
                     __tuple_types<_Tp...>()) {}
 

Modified: libcxx/trunk/include/type_traits
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/type_traits?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/include/type_traits (original)
+++ libcxx/trunk/include/type_traits Wed Sep 25 02:10:38 2019
@@ -2807,21 +2807,6 @@ _LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR boo
     = is_default_constructible<_Tp>::value;
 #endif
 
-#ifndef _LIBCPP_CXX03_LANG
-template <class _Tp>
-void __test_implicit_default_constructible(_Tp);
-
-template <class _Tp, class = void>
-struct __is_implicitly_default_constructible
-    : false_type
-{ };
-
-template <class _Tp>
-struct __is_implicitly_default_constructible<_Tp, decltype(__test_implicit_default_constructible<_Tp const&>({}))>
-    : is_default_constructible<_Tp>
-{ };
-#endif // !C++03
-
 // is_copy_constructible
 
 template <class _Tp>

Modified: libcxx/trunk/include/utility
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/utility?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/include/utility (original)
+++ libcxx/trunk/include/utility Wed Sep 25 02:10:38 2019
@@ -69,7 +69,7 @@ struct pair
 
     pair(const pair&) = default;
     pair(pair&&) = default;
-    explicit(see-below) constexpr pair();
+    constexpr pair();
     explicit(see-below) pair(const T1& x, const T2& y);                          // constexpr in C++14
     template <class U, class V> explicit(see-below) pair(U&& x, V&& y);          // constexpr in C++14
     template <class U, class V> explicit(see-below) pair(const pair<U, V>& p);   // constexpr in C++14
@@ -99,7 +99,7 @@ template <class T1, class T2>
 void
 swap(pair<T1, T2>& x, pair<T1, T2>& y) noexcept(noexcept(x.swap(y)));
 
-struct piecewise_construct_t { explicit piecewise_construct_t() = default; };
+struct piecewise_construct_t { };
 inline constexpr piecewise_construct_t piecewise_construct = piecewise_construct_t();
 
 template <class T> struct tuple_size;
@@ -276,7 +276,7 @@ template <class _Tp> constexpr add_const
 template <class _Tp>                        void as_const(const _Tp&&) = delete;
 #endif
 
-struct _LIBCPP_TEMPLATE_VIS piecewise_construct_t { explicit piecewise_construct_t() = default; };
+struct _LIBCPP_TEMPLATE_VIS piecewise_construct_t { };
 #if defined(_LIBCPP_CXX03_LANG) || defined(_LIBCPP_BUILDING_LIBRARY)
 extern _LIBCPP_EXPORTED_FROM_ABI const piecewise_construct_t piecewise_construct;// = piecewise_construct_t();
 #else
@@ -335,21 +335,9 @@ struct _LIBCPP_TEMPLATE_VIS pair
 
     struct _CheckArgs {
       template <class _U1, class _U2>
-      static constexpr bool __enable_explicit_default() {
+      static constexpr bool __enable_default() {
           return is_default_constructible<_U1>::value
-              && is_default_constructible<_U2>::value
-              && !__enable_implicit_default<_U1, _U2>();
-      }
-
-      template <class _U1, class _U2>
-      static constexpr bool __enable_implicit_default() {
-          // In C++03, there's no way to implement the resolution of LWG2510.
-#ifdef _LIBCPP_CXX03_LANG
-          return true;
-#else
-          return __is_implicitly_default_constructible<_U1>::value
-              && __is_implicitly_default_constructible<_U2>::value;
-#endif
+              && is_default_constructible<_U2>::value;
       }
 
       template <class _U1, class _U2>
@@ -400,15 +388,7 @@ struct _LIBCPP_TEMPLATE_VIS pair
     >::type;
 
     template<bool _Dummy = true, _EnableB<
-            _CheckArgsDep<_Dummy>::template __enable_explicit_default<_T1, _T2>()
-    > = false>
-    explicit _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
-    pair() _NOEXCEPT_(is_nothrow_default_constructible<first_type>::value &&
-                      is_nothrow_default_constructible<second_type>::value)
-        : first(), second() {}
-
-    template<bool _Dummy = true, _EnableB<
-            _CheckArgsDep<_Dummy>::template __enable_implicit_default<_T1, _T2>()
+            _CheckArgsDep<_Dummy>::template __enable_default<_T1, _T2>()
     > = false>
     _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
     pair() _NOEXCEPT_(is_nothrow_default_constructible<first_type>::value &&

Modified: libcxx/trunk/src/mutex.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/mutex.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/src/mutex.cpp (original)
+++ libcxx/trunk/src/mutex.cpp Wed Sep 25 02:10:38 2019
@@ -21,9 +21,9 @@
 _LIBCPP_BEGIN_NAMESPACE_STD
 #ifndef _LIBCPP_HAS_NO_THREADS
 
-const defer_lock_t  defer_lock{};
-const try_to_lock_t try_to_lock{};
-const adopt_lock_t  adopt_lock{};
+const defer_lock_t  defer_lock = {};
+const try_to_lock_t try_to_lock = {};
+const adopt_lock_t  adopt_lock = {};
 
 // ~mutex is defined elsewhere
 

Modified: libcxx/trunk/src/utility.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/utility.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/src/utility.cpp (original)
+++ libcxx/trunk/src/utility.cpp Wed Sep 25 02:10:38 2019
@@ -10,6 +10,6 @@
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 
-const piecewise_construct_t piecewise_construct{};
+const piecewise_construct_t piecewise_construct = {};
 
 _LIBCPP_END_NAMESPACE_STD

Modified: libcxx/trunk/test/libcxx/diagnostics/enable_nodiscard.fail.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/diagnostics/enable_nodiscard.fail.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/libcxx/diagnostics/enable_nodiscard.fail.cpp (original)
+++ libcxx/trunk/test/libcxx/diagnostics/enable_nodiscard.fail.cpp Wed Sep 25 02:10:38 2019
@@ -14,7 +14,7 @@
 // UNSUPPORTED: c++98, c++03
 
 // GCC 7 is the first version to introduce [[nodiscard]]
-// UNSUPPORTED: gcc-5, gcc-6
+// UNSUPPORTED: gcc-4.9, gcc-5, gcc-6
 
 // MODULES_DEFINES: _LIBCPP_ENABLE_NODISCARD
 #define _LIBCPP_ENABLE_NODISCARD

Modified: libcxx/trunk/test/libcxx/diagnostics/enable_nodiscard_disable_after_cxx17.fail.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/diagnostics/enable_nodiscard_disable_after_cxx17.fail.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/libcxx/diagnostics/enable_nodiscard_disable_after_cxx17.fail.cpp (original)
+++ libcxx/trunk/test/libcxx/diagnostics/enable_nodiscard_disable_after_cxx17.fail.cpp Wed Sep 25 02:10:38 2019
@@ -10,7 +10,7 @@
 // UNSUPPORTED: c++98, c++03
 
 // GCC 7 is the first version to introduce [[nodiscard]]
-// UNSUPPORTED: gcc-5, gcc-6
+// UNSUPPORTED: gcc-4.9, gcc-5, gcc-6
 
 // Test that _LIBCPP_DISABLE_NODISCARD_EXT only disables _LIBCPP_NODISCARD_EXT
 // and not _LIBCPP_NODISCARD_AFTER_CXX17.

Modified: libcxx/trunk/test/libcxx/diagnostics/enable_nodiscard_disable_nodiscard_ext.fail.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/diagnostics/enable_nodiscard_disable_nodiscard_ext.fail.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/libcxx/diagnostics/enable_nodiscard_disable_nodiscard_ext.fail.cpp (original)
+++ libcxx/trunk/test/libcxx/diagnostics/enable_nodiscard_disable_nodiscard_ext.fail.cpp Wed Sep 25 02:10:38 2019
@@ -10,7 +10,7 @@
 // UNSUPPORTED: c++98, c++03
 
 // GCC 7 is the first version to introduce [[nodiscard]]
-// UNSUPPORTED: gcc-5, gcc-6
+// UNSUPPORTED: gcc-4.9, gcc-5, gcc-6
 
 
 // MODULES_DEFINES: _LIBCPP_ENABLE_NODISCARD

Modified: libcxx/trunk/test/libcxx/diagnostics/nodiscard_extensions.fail.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/diagnostics/nodiscard_extensions.fail.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/libcxx/diagnostics/nodiscard_extensions.fail.cpp (original)
+++ libcxx/trunk/test/libcxx/diagnostics/nodiscard_extensions.fail.cpp Wed Sep 25 02:10:38 2019
@@ -10,7 +10,7 @@
 // UNSUPPORTED: c++98, c++03
 
 // GCC versions prior to 7.0 don't provide the required [[nodiscard]] attribute.
-// UNSUPPORTED: gcc-5, gcc-6
+// UNSUPPORTED: gcc-4, gcc-5, gcc-6
 
 // AppleClang9 doesn't yet support C++17's implicitly synthesized deduction
 // guides from existing ctors, needed by default_searcher() below.

Removed: libcxx/trunk/test/libcxx/type_traits/is_implicitly_default_constructible.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/type_traits/is_implicitly_default_constructible.pass.cpp?rev=372831&view=auto
==============================================================================
--- libcxx/trunk/test/libcxx/type_traits/is_implicitly_default_constructible.pass.cpp (original)
+++ libcxx/trunk/test/libcxx/type_traits/is_implicitly_default_constructible.pass.cpp (removed)
@@ -1,59 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: c++98, c++03
-
-// Before GCC 6, this trait fails. See https://stackoverflow.com/q/41799015/627587.
-// UNSUPPORTED: gcc-5
-
-// <type_traits>
-
-// __is_implicitly_default_constructible<Tp>
-
-#include <type_traits>
-
-
-struct ExplicitlyDefaultConstructible1 {
-    explicit ExplicitlyDefaultConstructible1() = default;
-};
-
-struct ExplicitlyDefaultConstructible2 {
-    explicit ExplicitlyDefaultConstructible2() { }
-};
-
-struct ImplicitlyDefaultConstructible1 {
-    ImplicitlyDefaultConstructible1() { }
-};
-
-struct ImplicitlyDefaultConstructible2 {
-    ImplicitlyDefaultConstructible2() = default;
-};
-
-struct NonDefaultConstructible1 {
-    NonDefaultConstructible1() = delete;
-};
-
-struct NonDefaultConstructible2 {
-    explicit NonDefaultConstructible2() = delete;
-};
-
-struct NonDefaultConstructible3 {
-    NonDefaultConstructible3(NonDefaultConstructible3&&) { }
-};
-
-static_assert(!std::__is_implicitly_default_constructible<ExplicitlyDefaultConstructible1>::value, "");
-static_assert(!std::__is_implicitly_default_constructible<ExplicitlyDefaultConstructible2>::value, "");
-static_assert(std::__is_implicitly_default_constructible<ImplicitlyDefaultConstructible1>::value, "");
-static_assert(std::__is_implicitly_default_constructible<ImplicitlyDefaultConstructible2>::value, "");
-static_assert(!std::__is_implicitly_default_constructible<NonDefaultConstructible1>::value, "");
-static_assert(!std::__is_implicitly_default_constructible<NonDefaultConstructible2>::value, "");
-static_assert(!std::__is_implicitly_default_constructible<NonDefaultConstructible3>::value, "");
-
-int main(int, char**) {
-    return 0;
-}

Modified: libcxx/trunk/test/libcxx/utilities/utility/pairs/pairs.pair/non_trivial_copy_move_ABI.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/utilities/utility/pairs/pairs.pair/non_trivial_copy_move_ABI.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/libcxx/utilities/utility/pairs/pairs.pair/non_trivial_copy_move_ABI.pass.cpp (original)
+++ libcxx/trunk/test/libcxx/utilities/utility/pairs/pairs.pair/non_trivial_copy_move_ABI.pass.cpp Wed Sep 25 02:10:38 2019
@@ -6,6 +6,9 @@
 //
 //===----------------------------------------------------------------------===//
 
+// The test fails due to the missing is_trivially_constructible intrinsic.
+// XFAIL: gcc-4.9
+
 // The test suite needs to define the ABI macros on the command line when
 // modules are enabled.
 // UNSUPPORTED: -fmodules

Modified: libcxx/trunk/test/libcxx/utilities/utility/pairs/pairs.pair/trivial_copy_move_ABI.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/utilities/utility/pairs/pairs.pair/trivial_copy_move_ABI.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/libcxx/utilities/utility/pairs/pairs.pair/trivial_copy_move_ABI.pass.cpp (original)
+++ libcxx/trunk/test/libcxx/utilities/utility/pairs/pairs.pair/trivial_copy_move_ABI.pass.cpp Wed Sep 25 02:10:38 2019
@@ -6,6 +6,9 @@
 //
 //===----------------------------------------------------------------------===//
 
+// The test fails due to the missing is_trivially_constructible intrinsic.
+// XFAIL: gcc-4.9
+
 // <utility>
 
 // template <class T1, class T2> struct pair

Modified: libcxx/trunk/test/std/experimental/simd/simd.cons/broadcast.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/experimental/simd/simd.cons/broadcast.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/experimental/simd/simd.cons/broadcast.pass.cpp (original)
+++ libcxx/trunk/test/std/experimental/simd/simd.cons/broadcast.pass.cpp Wed Sep 25 02:10:38 2019
@@ -8,6 +8,9 @@
 
 // UNSUPPORTED: c++98, c++03, c++11, c++14
 
+// See GCC PR63723.
+// UNSUPPORTED: gcc-4.9
+
 // <experimental/simd>
 //
 // [simd.class]

Modified: libcxx/trunk/test/std/experimental/simd/simd.cons/generator.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/experimental/simd/simd.cons/generator.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/experimental/simd/simd.cons/generator.pass.cpp (original)
+++ libcxx/trunk/test/std/experimental/simd/simd.cons/generator.pass.cpp Wed Sep 25 02:10:38 2019
@@ -8,6 +8,9 @@
 
 // UNSUPPORTED: c++98, c++03, c++11, c++14
 
+// See GCC PR63723.
+// UNSUPPORTED: gcc-4.9
+
 // <experimental/simd>
 //
 // [simd.class]

Modified: libcxx/trunk/test/std/iterators/stream.iterators/istream.iterator/types.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/iterators/stream.iterators/istream.iterator/types.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/iterators/stream.iterators/istream.iterator/types.pass.cpp (original)
+++ libcxx/trunk/test/std/iterators/stream.iterators/istream.iterator/types.pass.cpp Wed Sep 25 02:10:38 2019
@@ -8,6 +8,9 @@
 
 // <iterator>
 
+// Test fails due to use of is_trivially_* trait.
+// XFAIL: gcc-4.9
+
 // template <class T, class charT = char, class traits = char_traits<charT>,
 //           class Distance = ptrdiff_t>
 // class istream_iterator

Modified: libcxx/trunk/test/std/iterators/stream.iterators/istreambuf.iterator/types.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/iterators/stream.iterators/istreambuf.iterator/types.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/iterators/stream.iterators/istreambuf.iterator/types.pass.cpp (original)
+++ libcxx/trunk/test/std/iterators/stream.iterators/istreambuf.iterator/types.pass.cpp Wed Sep 25 02:10:38 2019
@@ -8,6 +8,9 @@
 
 // <iterator>
 
+// Test fails due to use of is_trivially_* trait.
+// XFAIL: gcc-4.9
+
 // template<class charT, class traits = char_traits<charT> >
 // class istreambuf_iterator
 //     : public iterator<input_iterator_tag, charT,

Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp (original)
+++ libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp Wed Sep 25 02:10:38 2019
@@ -15,6 +15,10 @@
 // (except clang-3.6 which temporarily enabled sized-deallocation)
 // UNSUPPORTED: clang, apple-clang
 
+// NOTE: GCC 4.9.1 does not support sized-deallocation in C++14. However
+// GCC 5.1 does.
+// XFAIL: gcc-4.7, gcc-4.8, gcc-4.9
+
 #include <new>
 #include <cstddef>
 #include <cstdlib>

Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp (original)
+++ libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp Wed Sep 25 02:10:38 2019
@@ -15,6 +15,10 @@
 // (except clang-3.6 which temporarily enabled sized-deallocation)
 // UNSUPPORTED: clang, apple-clang
 
+// NOTE: GCC 4.9.1 does not support sized-deallocation in C++14. However
+// GCC 5.1 does.
+// XFAIL: gcc-4.7, gcc-4.8, gcc-4.9
+
 #include <new>
 #include <cstddef>
 #include <cstdlib>

Removed: libcxx/trunk/test/std/language.support/support.dynamic/nothrow_t.fail.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.dynamic/nothrow_t.fail.cpp?rev=372831&view=auto
==============================================================================
--- libcxx/trunk/test/std/language.support/support.dynamic/nothrow_t.fail.cpp (original)
+++ libcxx/trunk/test/std/language.support/support.dynamic/nothrow_t.fail.cpp (removed)
@@ -1,30 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-//                     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.
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: c++98, c++03
-
-// Before GCC 6, aggregate initialization kicks in.
-// See https://stackoverflow.com/q/41799015/627587.
-// UNSUPPORTED: gcc-5
-
-// struct nothrow_t {
-//   explicit nothrow_t() = default;
-// };
-// extern const nothrow_t nothrow;
-
-// This test checks for LWG 2510.
-
-#include <new>
-
-
-std::nothrow_t f() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-
-int main(int, char**) {
-    return 0;
-}

Removed: libcxx/trunk/test/std/language.support/support.dynamic/nothrow_t.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.dynamic/nothrow_t.pass.cpp?rev=372831&view=auto
==============================================================================
--- libcxx/trunk/test/std/language.support/support.dynamic/nothrow_t.pass.cpp (original)
+++ libcxx/trunk/test/std/language.support/support.dynamic/nothrow_t.pass.cpp (removed)
@@ -1,23 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-//                     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.
-//
-//===----------------------------------------------------------------------===//
-
-// struct nothrow_t {
-//   explicit nothrow_t() = default;
-// };
-// extern const nothrow_t nothrow;
-
-#include <new>
-
-
-int main(int, char**) {
-  std::nothrow_t x = std::nothrow;
-  (void)x;
-
-  return 0;
-}

Removed: libcxx/trunk/test/std/thread/thread.mutex/thread.lock/types.fail.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/thread/thread.mutex/thread.lock/types.fail.cpp?rev=372831&view=auto
==============================================================================
--- libcxx/trunk/test/std/thread/thread.mutex/thread.lock/types.fail.cpp (original)
+++ libcxx/trunk/test/std/thread/thread.mutex/thread.lock/types.fail.cpp (removed)
@@ -1,34 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-//                     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.
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: c++98, c++03
-// UNSUPPORTED: libcpp-has-no-threads
-
-// Before GCC 6, aggregate initialization kicks in.
-// See https://stackoverflow.com/q/41799015/627587.
-// UNSUPPORTED: gcc-5
-
-// <mutex>
-
-// struct defer_lock_t { explicit defer_lock_t() = default; };
-// struct try_to_lock_t { explicit try_to_lock_t() = default; };
-// struct adopt_lock_t { explicit adopt_lock_t() = default; };
-
-// This test checks for LWG 2510.
-
-#include <mutex>
-
-
-std::defer_lock_t f1() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-std::try_to_lock_t f2() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-std::adopt_lock_t f3() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-
-int main(int, char**) {
-    return 0;
-}

Modified: libcxx/trunk/test/std/thread/thread.mutex/thread.lock/types.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/thread/thread.mutex/thread.lock/types.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/thread/thread.mutex/thread.lock/types.pass.cpp (original)
+++ libcxx/trunk/test/std/thread/thread.mutex/thread.lock/types.pass.cpp Wed Sep 25 02:10:38 2019
@@ -10,15 +10,16 @@
 
 // <mutex>
 
-// struct defer_lock_t { explicit defer_lock_t() = default; };
-// struct try_to_lock_t { explicit try_to_lock_t() = default; };
-// struct adopt_lock_t { explicit adopt_lock_t() = default; };
+// struct defer_lock_t {};
+// struct try_to_lock_t {};
+// struct adopt_lock_t {};
 //
 // constexpr defer_lock_t  defer_lock{};
 // constexpr try_to_lock_t try_to_lock{};
 // constexpr adopt_lock_t  adopt_lock{};
 
 #include <mutex>
+#include <type_traits>
 
 #include "test_macros.h"
 
@@ -32,5 +33,5 @@ int main(int, char**)
     T2 t2 = std::try_to_lock; ((void)t2);
     T3 t3 = std::adopt_lock; ((void)t3);
 
-    return 0;
+  return 0;
 }

Modified: libcxx/trunk/test/std/utilities/function.objects/refwrap/type_properties.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/function.objects/refwrap/type_properties.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/function.objects/refwrap/type_properties.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/function.objects/refwrap/type_properties.pass.cpp Wed Sep 25 02:10:38 2019
@@ -13,6 +13,9 @@
 // Test that reference wrapper meets the requirements of CopyConstructible and
 // CopyAssignable, and TriviallyCopyable (starting in C++14).
 
+// Test fails due to use of is_trivially_* trait.
+// XFAIL: gcc-4.9 && c++14
+
 #include <functional>
 #include <type_traits>
 #include <string>

Removed: libcxx/trunk/test/std/utilities/memory/allocator.tag/allocator_arg.fail.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/allocator.tag/allocator_arg.fail.cpp?rev=372831&view=auto
==============================================================================
--- libcxx/trunk/test/std/utilities/memory/allocator.tag/allocator_arg.fail.cpp (original)
+++ libcxx/trunk/test/std/utilities/memory/allocator.tag/allocator_arg.fail.cpp (removed)
@@ -1,29 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: c++98, c++03
-
-// Before GCC 6, aggregate initialization kicks in.
-// See https://stackoverflow.com/q/41799015/627587.
-// UNSUPPORTED: gcc-5
-
-// <memory>
-
-// struct allocator_arg_t { explicit allocator_arg_t() = default; };
-// const allocator_arg_t allocator_arg = allocator_arg_t();
-
-// This test checks for LWG 2510.
-
-#include <memory>
-
-
-std::allocator_arg_t f() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-
-int main(int, char**) {
-    return 0;
-}

Modified: libcxx/trunk/test/std/utilities/memory/allocator.tag/allocator_arg.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/allocator.tag/allocator_arg.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/memory/allocator.tag/allocator_arg.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/memory/allocator.tag/allocator_arg.pass.cpp Wed Sep 25 02:10:38 2019
@@ -8,7 +8,7 @@
 
 // <memory>
 
-// struct allocator_arg_t { explicit allocator_arg_t() = default; };
+// struct allocator_arg_t { };
 // const allocator_arg_t allocator_arg = allocator_arg_t();
 
 #include <memory>
@@ -21,5 +21,5 @@ int main(int, char**)
 {
     test(std::allocator_arg);
 
-    return 0;
+  return 0;
 }

Modified: libcxx/trunk/test/std/utilities/memory/specialized.algorithms/specialized.addressof/constexpr_addressof.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/specialized.algorithms/specialized.addressof/constexpr_addressof.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/memory/specialized.algorithms/specialized.addressof/constexpr_addressof.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/memory/specialized.algorithms/specialized.addressof/constexpr_addressof.pass.cpp Wed Sep 25 02:10:38 2019
@@ -7,7 +7,7 @@
 //===----------------------------------------------------------------------===//
 
 // UNSUPPORTED: c++98, c++03, c++11, c++14
-// XFAIL: gcc-5, gcc-6
+// XFAIL: gcc-4, gcc-5, gcc-6
 
 // <memory>
 

Modified: libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/has_unique_object_representations.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/has_unique_object_representations.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/has_unique_object_representations.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/has_unique_object_representations.pass.cpp Wed Sep 25 02:10:38 2019
@@ -7,7 +7,7 @@
 //===----------------------------------------------------------------------===//
 
 // UNSUPPORTED: c++98, c++03, c++11, c++14
-// UNSUPPORTED: clang-3, clang-4, clang-5, apple-clang, gcc-5, gcc-6
+// UNSUPPORTED: clang-3, clang-4, clang-5, apple-clang, gcc-4, gcc-5, gcc-6
 
 // type_traits
 

Modified: libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_assignable.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_assignable.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_assignable.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_assignable.pass.cpp Wed Sep 25 02:10:38 2019
@@ -10,6 +10,8 @@
 
 // is_trivially_assignable
 
+// XFAIL: gcc-4.9
+
 #include <type_traits>
 #include "test_macros.h"
 

Modified: libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_assignable.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_assignable.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_assignable.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_assignable.pass.cpp Wed Sep 25 02:10:38 2019
@@ -10,6 +10,8 @@
 
 // is_trivially_copy_assignable
 
+// XFAIL: gcc-4.9
+
 #include <type_traits>
 #include "test_macros.h"
 

Modified: libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_constructible.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_constructible.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_constructible.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copy_constructible.pass.cpp Wed Sep 25 02:10:38 2019
@@ -10,6 +10,8 @@
 
 // is_trivially_copy_constructible
 
+// XFAIL: gcc-4.9
+
 #include <type_traits>
 #include "test_macros.h"
 

Modified: libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_assignable.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_assignable.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_assignable.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_assignable.pass.cpp Wed Sep 25 02:10:38 2019
@@ -10,6 +10,8 @@
 
 // is_trivially_move_assignable
 
+// XFAIL: gcc-4.9
+
 #include <type_traits>
 #include "test_macros.h"
 

Modified: libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_constructible.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_constructible.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_constructible.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_move_constructible.pass.cpp Wed Sep 25 02:10:38 2019
@@ -10,6 +10,8 @@
 
 // is_trivially_move_constructible
 
+// XFAIL: gcc-4.9
+
 #include <type_traits>
 #include "test_macros.h"
 

Removed: libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/alloc.fail.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/alloc.fail.cpp?rev=372831&view=auto
==============================================================================
--- libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/alloc.fail.cpp (original)
+++ libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/alloc.fail.cpp (removed)
@@ -1,33 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: c++98, c++03
-
-// <tuple>
-
-// template <class... Types> class tuple;
-
-// template <class Alloc>
-//   explicit(see-below) tuple(allocator_arg_t, const Alloc& a);
-
-// Make sure we get the explicit-ness of the constructor right.
-// This is LWG 3158.
-
-#include <tuple>
-#include <memory>
-
-
-struct ExplicitDefault { explicit ExplicitDefault() { } };
-
-std::tuple<ExplicitDefault> explicit_default_test() {
-    return {std::allocator_arg, std::allocator<int>()}; // expected-error {{chosen constructor is explicit in copy-initialization}}
-}
-
-int main(int, char**) {
-    return 0;
-}

Modified: libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/alloc.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/alloc.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/alloc.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/alloc.pass.cpp Wed Sep 25 02:10:38 2019
@@ -13,7 +13,7 @@
 // template <class... Types> class tuple;
 
 // template <class Alloc>
-//   explicit(see-below) tuple(allocator_arg_t, const Alloc& a);
+//   tuple(allocator_arg_t, const Alloc& a);
 
 // NOTE: this constructor does not currently support tags derived from
 // allocator_arg_t because libc++ has to deduce the parameter as a template

Removed: libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/default.fail.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/default.fail.cpp?rev=372831&view=auto
==============================================================================
--- libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/default.fail.cpp (original)
+++ libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/default.fail.cpp (removed)
@@ -1,53 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: c++98, c++03
-
-// Before GCC 6, aggregate initialization kicks in.
-// See https://stackoverflow.com/q/41799015/627587.
-// UNSUPPORTED: gcc-5
-
-// <tuple>
-
-// template <class... Types> class tuple;
-
-// explicit(see-below) constexpr tuple();
-
-#include <tuple>
-
-
-struct Implicit {
-    Implicit() = default;
-};
-
-struct Explicit {
-    explicit Explicit() = default;
-};
-
-std::tuple<> test1() { return {}; }
-
-std::tuple<Implicit> test2() { return {}; }
-std::tuple<Explicit> test3() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-
-std::tuple<Implicit, Implicit> test4() { return {}; }
-std::tuple<Explicit, Implicit> test5() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-std::tuple<Implicit, Explicit> test6() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-std::tuple<Explicit, Explicit> test7() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-
-std::tuple<Implicit, Implicit, Implicit> test8() { return {}; }
-std::tuple<Implicit, Implicit, Explicit> test9() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-std::tuple<Implicit, Explicit, Implicit> test10() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-std::tuple<Implicit, Explicit, Explicit> test11() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-std::tuple<Explicit, Implicit, Implicit> test12() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-std::tuple<Explicit, Implicit, Explicit> test13() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-std::tuple<Explicit, Explicit, Implicit> test14() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-std::tuple<Explicit, Explicit, Explicit> test15() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-
-int main(int, char**) {
-    return 0;
-}

Modified: libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/default.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/default.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/default.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/default.pass.cpp Wed Sep 25 02:10:38 2019
@@ -10,7 +10,7 @@
 
 // template <class... Types> class tuple;
 
-// explicit(see-below) constexpr tuple();
+// constexpr tuple();
 
 // UNSUPPORTED: c++98, c++03
 

Modified: libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_incomplete.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_incomplete.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_incomplete.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_incomplete.pass.cpp Wed Sep 25 02:10:38 2019
@@ -14,6 +14,7 @@
 //   struct tuple_size<tuple<Types...>>
 //     : public integral_constant<size_t, sizeof...(Types)> { };
 
+// XFAIL: gcc-4.9
 // UNSUPPORTED: c++98, c++03
 
 #include <tuple>

Modified: libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_value_sfinae.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_value_sfinae.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_value_sfinae.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_value_sfinae.pass.cpp Wed Sep 25 02:10:38 2019
@@ -14,6 +14,7 @@
 //   class tuple_size<tuple<Types...>>
 //     : public integral_constant<size_t, sizeof...(Types)> { };
 
+// XFAIL: gcc-4.9
 // UNSUPPORTED: c++98, c++03
 
 #include <tuple>

Modified: libcxx/trunk/test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct.pass.cpp Wed Sep 25 02:10:38 2019
@@ -12,7 +12,7 @@
 
 // template <class T1, class T2> struct pair
 
-// struct piecewise_construct_t { explicit piecewise_construct_t() = default; };
+// struct piecewise_construct_t { };
 // constexpr piecewise_construct_t piecewise_construct = piecewise_construct_t();
 
 #include <utility>

Removed: libcxx/trunk/test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct_t.fail.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct_t.fail.cpp?rev=372831&view=auto
==============================================================================
--- libcxx/trunk/test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct_t.fail.cpp (original)
+++ libcxx/trunk/test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct_t.fail.cpp (removed)
@@ -1,29 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: c++98, c++03
-
-// Before GCC 6, aggregate initialization kicks in.
-// See https://stackoverflow.com/q/41799015/627587.
-// UNSUPPORTED: gcc-5
-
-// <utility>
-
-// struct piecewise_construct_t { explicit piecewise_construct_t() = default; };
-// constexpr piecewise_construct_t piecewise_construct = piecewise_construct_t();
-
-// This test checks for LWG 2510.
-
-#include <utility>
-
-
-std::piecewise_construct_t f() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-
-int main(int, char**) {
-    return 0;
-}

Removed: libcxx/trunk/test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct_t.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct_t.pass.cpp?rev=372831&view=auto
==============================================================================
--- libcxx/trunk/test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct_t.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct_t.pass.cpp (removed)
@@ -1,24 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: c++98, c++03
-
-// <utility>
-
-// struct piecewise_construct_t { explicit piecewise_construct_t() = default; };
-// constexpr piecewise_construct_t piecewise_construct = piecewise_construct_t();
-
-#include <utility>
-
-
-int main(int, char**) {
-    std::piecewise_construct_t x = std::piecewise_construct;
-    (void)x;
-
-    return 0;
-}

Removed: libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/default.explicit.fail.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/default.explicit.fail.cpp?rev=372831&view=auto
==============================================================================
--- libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/default.explicit.fail.cpp (original)
+++ libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/default.explicit.fail.cpp (removed)
@@ -1,42 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: c++98, c++03
-
-// Before GCC 6, aggregate initialization kicks in.
-// See https://stackoverflow.com/q/41799015/627587.
-// UNSUPPORTED: gcc-5
-
-// <utility>
-
-// template <class T1, class T2> struct pair
-
-// explicit(see-below) constexpr pair();
-
-// This test checks the conditional explicitness of std::pair's default
-// constructor as introduced by the resolution of LWG 2510.
-
-#include <utility>
-
-
-struct ImplicitlyDefaultConstructible {
-    ImplicitlyDefaultConstructible() = default;
-};
-
-struct ExplicitlyDefaultConstructible {
-    explicit ExplicitlyDefaultConstructible() = default;
-};
-
-std::pair<ImplicitlyDefaultConstructible, ExplicitlyDefaultConstructible> test1() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-std::pair<ExplicitlyDefaultConstructible, ImplicitlyDefaultConstructible> test2() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-std::pair<ExplicitlyDefaultConstructible, ExplicitlyDefaultConstructible> test3() { return {}; } // expected-error 1 {{chosen constructor is explicit in copy-initialization}}
-std::pair<ImplicitlyDefaultConstructible, ImplicitlyDefaultConstructible> test4() { return {}; }
-
-int main(int, char**) {
-    return 0;
-}

Modified: libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/default.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/default.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/default.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/default.pass.cpp Wed Sep 25 02:10:38 2019
@@ -10,7 +10,12 @@
 
 // template <class T1, class T2> struct pair
 
-// explicit(see-below) constexpr pair();
+// constexpr pair();
+
+// This test doesn't pass due to a constexpr bug in GCC 4.9 that fails
+// to initialize any type without a user provided constructor in a constant
+// expression (e.g. float).
+// XFAIL: gcc-4.9
 
 // NOTE: The SFINAE on the default constructor is tested in
 //       default-sfinae.pass.cpp

Modified: libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp Wed Sep 25 02:10:38 2019
@@ -13,6 +13,9 @@
 // pair(pair const&) = default;
 // pair(pair&&) = default;
 
+// Doesn't pass due to use of is_trivially_* trait.
+// XFAIL: gcc-4.9
+
 #include <utility>
 #include <cassert>
 

Modified: libcxx/trunk/test/support/test.workarounds/c1xx_broken_is_trivially_copyable.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/support/test.workarounds/c1xx_broken_is_trivially_copyable.pass.cpp?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/test/support/test.workarounds/c1xx_broken_is_trivially_copyable.pass.cpp (original)
+++ libcxx/trunk/test/support/test.workarounds/c1xx_broken_is_trivially_copyable.pass.cpp Wed Sep 25 02:10:38 2019
@@ -8,6 +8,10 @@
 
 // UNSUPPORTED: c++98, c++03
 
+// This workaround option is specific to MSVC's C1XX, so we don't care that
+// it isn't set for older GCC versions.
+// XFAIL: gcc-4.9
+
 // Verify TEST_WORKAROUND_C1XX_BROKEN_IS_TRIVIALLY_COPYABLE.
 
 #include <type_traits>

Modified: libcxx/trunk/www/cxx1z_status.html
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/www/cxx1z_status.html?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/www/cxx1z_status.html (original)
+++ libcxx/trunk/www/cxx1z_status.html Wed Sep 25 02:10:38 2019
@@ -372,7 +372,7 @@
 	<tr><td><a href="https://wg21.link/LWG2468">2468</a></td><td>Self-move-assignment of library types</td><td>Issaquah</td><td></td></tr>
 	<tr><td><a href="https://wg21.link/LWG2475">2475</a></td><td>Allow overwriting of std::basic_string terminator with charT() to allow cleaner interoperation with legacy APIs</td><td>Issaquah</td><td>Complete</td></tr>
 	<tr><td><a href="https://wg21.link/LWG2503">2503</a></td><td>multiline option should be added to syntax_option_type</td><td>Issaquah</td><td></td></tr>
-	<tr><td><a href="https://wg21.link/LWG2510">2510</a></td><td>Tag types should not be DefaultConstructible</td><td>Issaquah</td><td>Complete</td></tr>
+	<tr><td><a href="https://wg21.link/LWG2510">2510</a></td><td>Tag types should not be DefaultConstructible</td><td>Issaquah</td><td></td></tr>
 	<tr><td><a href="https://wg21.link/LWG2514">2514</a></td><td>Type traits must not be final</td><td>Issaquah</td><td>Complete</td></tr>
 	<tr><td><a href="https://wg21.link/LWG2518">2518</a></td><td>[fund.ts.v2] Non-member swap for propagate_const should call member swap</td><td>Issaquah</td><td>Complete</td></tr>
 	<tr><td><a href="https://wg21.link/LWG2519">2519</a></td><td>Iterator operator-= has gratuitous undefined behaviour</td><td>Issaquah</td><td>Complete</td></tr>

Modified: libcxx/trunk/www/cxx2a_status.html
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/www/cxx2a_status.html?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/www/cxx2a_status.html (original)
+++ libcxx/trunk/www/cxx2a_status.html Wed Sep 25 02:10:38 2019
@@ -358,7 +358,7 @@
 	<tr><td><a href="https://wg21.link/LWG3182">3182</a></td><td>Specification of <tt>Same</tt> could be clearer</td><td>Kona</td><td></td></tr>
 
 	<tr><td></td><td></td><td></td><td></td></tr>
-	<tr><td><a href="https://wg21.link/LWG2899">2899</a></td><td><tt>is_(nothrow_)move_constructible</tt> and <tt>tuple</tt>, <tt>optional</tt> and <tt>unique_ptr</tt></td><td>Cologne</td><td>Complete</td></tr>
+	<tr><td><a href="https://wg21.link/LWG2899">2899</a></td><td><tt>is_(nothrow_)move_constructible</tt> and <tt>tuple</tt>, <tt>optional</tt> and <tt>unique_ptr</tt></td><td>Cologne</td><td></td></tr>
 	<tr><td><a href="https://wg21.link/LWG3055">3055</a></td><td><tt>path::operator+=(<i>single-character</i>)</tt> misspecified</td><td>Cologne</td><td></td></tr>
 	<tr><td><a href="https://wg21.link/LWG3158">3158</a></td><td><tt>tuple(allocator_arg_t, const Alloc&)</tt> should be conditionally explicit</td><td>Cologne</td><td></td></tr>
 	<tr><td><a href="https://wg21.link/LWG3169">3169</a></td><td><tt>ranges</tt> permutation generators discard useful information</td><td>Cologne</td><td></td></tr>

Modified: libcxx/trunk/www/upcoming_meeting.html
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/www/upcoming_meeting.html?rev=372832&r1=372831&r2=372832&view=diff
==============================================================================
--- libcxx/trunk/www/upcoming_meeting.html (original)
+++ libcxx/trunk/www/upcoming_meeting.html Wed Sep 25 02:10:38 2019
@@ -61,7 +61,7 @@
 <tr><th>Issue #</th><th>Has P/R</th><th>Issue Name</th><th>Meeting</th><th>Status</th></tr>
 <tr><td><a href="https://wg21.link/LWG2899">2899</a></td><td>Yes</td><td><tt>is_(nothrow_)move_constructible</tt> and <tt>tuple</tt>, <tt>optional</tt> and <tt>unique_ptr</tt></td><td>Cologne</td><td></td></tr>
 <tr><td><a href="https://wg21.link/LWG3055">3055</a></td><td>Yes</td><td><tt>path::operator+=(<i>single-character</i>)</tt> misspecified</td><td>Cologne</td><td></td></tr>
-<tr><td><a href="https://wg21.link/LWG3158">3158</a></td><td>Yes</td><td><tt>tuple(allocator_arg_t, const Alloc&)</tt> should be conditionally explicit</td><td>Cologne</td><td>Complete</td></tr>
+<tr><td><a href="https://wg21.link/LWG3158">3158</a></td><td>Yes</td><td><tt>tuple(allocator_arg_t, const Alloc&)</tt> should be conditionally explicit</td><td>Cologne</td><td></td></tr>
 <tr><td><a href="https://wg21.link/LWG3169">3169</a></td><td>Yes</td><td><tt>ranges</tt> permutation generators discard useful information</td><td>Cologne</td><td></td></tr>
 <tr><td><a href="https://wg21.link/LWG3183">3183</a></td><td>Yes</td><td>Normative permission to specialize Ranges variable templates</td><td>Cologne</td><td></td></tr>
 <tr><td><a href="https://wg21.link/LWG3184">3184</a></td><td>Yes</td><td>Inconsistencies in <tt>bind_front</tt> wording</td><td>Cologne</td><td></td></tr>
@@ -95,6 +95,7 @@
 <ul>
 <li>2899 - Louis</li>
 <li>3055 - Eric?</li>
+<li>3158 - Louis</li>
 <li>3169 - We don't do ranges yet</li>
 <li>3183 - We don't do ranges yet</li>
 <li>3184 - We don't do bind_front yet</li>




More information about the libcxx-commits mailing list