Revert "[pair] Mark constructors as conditionally noexcept"

This broke the tests on Linux. Reverting until I find out why the tests
are broken (tomorrow).

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@348825 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/utility b/include/utility
index fb7f447..ddfa27e 100644
--- a/include/utility
+++ b/include/utility
@@ -409,17 +409,13 @@
             _CheckArgsDep<_Dummy>::template __enable_default<_T1, _T2>()
     > = false>
     _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
-    pair() _NOEXCEPT_(is_nothrow_default_constructible<first_type>::value &&
-                      is_nothrow_default_constructible<second_type>::value)
-        : first(), second() {}
+    pair() : first(), second() {}
 
     template <bool _Dummy = true, _EnableB<
              _CheckArgsDep<_Dummy>::template __enable_explicit<_T1 const&, _T2 const&>()
     > = false>
     _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
     explicit pair(_T1 const& __t1, _T2 const& __t2)
-        _NOEXCEPT_(is_nothrow_copy_constructible<first_type>::value &&
-                   is_nothrow_copy_constructible<second_type>::value)
         : first(__t1), second(__t2) {}
 
     template<bool _Dummy = true, _EnableB<
@@ -427,8 +423,6 @@
     > = false>
     _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
     pair(_T1 const& __t1, _T2 const& __t2)
-        _NOEXCEPT_(is_nothrow_copy_constructible<first_type>::value &&
-                   is_nothrow_copy_constructible<second_type>::value)
         : first(__t1), second(__t2) {}
 
     template<class _U1, class _U2, _EnableB<
@@ -436,8 +430,6 @@
     > = false>
     _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
     explicit pair(_U1&& __u1, _U2&& __u2)
-        _NOEXCEPT_((is_nothrow_constructible<first_type, _U1>::value &&
-                    is_nothrow_constructible<second_type, _U2>::value))
         : first(_VSTD::forward<_U1>(__u1)), second(_VSTD::forward<_U2>(__u2)) {}
 
     template<class _U1, class _U2, _EnableB<
@@ -445,8 +437,6 @@
     > = false>
     _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
     pair(_U1&& __u1, _U2&& __u2)
-        _NOEXCEPT_((is_nothrow_constructible<first_type, _U1>::value &&
-                    is_nothrow_constructible<second_type, _U2>::value))
         : first(_VSTD::forward<_U1>(__u1)), second(_VSTD::forward<_U2>(__u2)) {}
 
     template<class _U1, class _U2, _EnableB<
@@ -454,8 +444,6 @@
     > = false>
     _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
     explicit pair(pair<_U1, _U2> const& __p)
-        _NOEXCEPT_((is_nothrow_constructible<first_type, _U1 const&>::value &&
-                    is_nothrow_constructible<second_type, _U2 const&>::value))
         : first(__p.first), second(__p.second) {}
 
     template<class _U1, class _U2, _EnableB<
@@ -463,8 +451,6 @@
     > = false>
     _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
     pair(pair<_U1, _U2> const& __p)
-        _NOEXCEPT_((is_nothrow_constructible<first_type, _U1 const&>::value &&
-                    is_nothrow_constructible<second_type, _U2 const&>::value))
         : first(__p.first), second(__p.second) {}
 
     template<class _U1, class _U2, _EnableB<
@@ -472,8 +458,6 @@
     > = false>
     _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
     explicit pair(pair<_U1, _U2>&&__p)
-        _NOEXCEPT_((is_nothrow_constructible<first_type, _U1&&>::value &&
-                    is_nothrow_constructible<second_type, _U2&&>::value))
         : first(_VSTD::forward<_U1>(__p.first)), second(_VSTD::forward<_U2>(__p.second)) {}
 
     template<class _U1, class _U2, _EnableB<
@@ -481,8 +465,6 @@
     > = false>
     _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
     pair(pair<_U1, _U2>&& __p)
-        _NOEXCEPT_((is_nothrow_constructible<first_type, _U1&&>::value &&
-                    is_nothrow_constructible<second_type, _U2&&>::value))
         : first(_VSTD::forward<_U1>(__p.first)), second(_VSTD::forward<_U2>(__p.second)) {}
 
     template<class _Tuple, _EnableB<
@@ -505,8 +487,6 @@
     _LIBCPP_INLINE_VISIBILITY
     pair(piecewise_construct_t __pc,
          tuple<_Args1...> __first_args, tuple<_Args2...> __second_args)
-        _NOEXCEPT_((is_nothrow_constructible<first_type, _Args1...>::value &&
-                    is_nothrow_constructible<second_type, _Args2...>::value))
         : pair(__pc, __first_args, __second_args,
                 typename __make_tuple_indices<sizeof...(_Args1)>::type(),
                 typename __make_tuple_indices<sizeof...(_Args2) >::type()) {}
diff --git a/test/libcxx/utilities/utility/pairs/pairs.pair/U_V.pass.cpp b/test/libcxx/utilities/utility/pairs/pairs.pair/U_V.pass.cpp
deleted file mode 100644
index 6a3e613..0000000
--- a/test/libcxx/utilities/utility/pairs/pairs.pair/U_V.pass.cpp
+++ /dev/null
@@ -1,54 +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
-
-// <utility>
-
-// template <class T1, class T2> struct pair
-
-// template<class U, class V> pair(U&& x, V&& y);
-
-#include <utility>
-
-
-struct ExplicitT {
-    constexpr explicit ExplicitT(int x) : value(x) {}
-    int value;
-};
-
-struct ImplicitT {
-    constexpr ImplicitT(int x) : value(x) {}
-    int value;
-};
-
-struct ExplicitNothrowT {
-    explicit ExplicitNothrowT(int x) noexcept : value(x) {}
-    int value;
-};
-
-struct ImplicitNothrowT {
-    ImplicitNothrowT(int x) noexcept : value(x) {}
-    int value;
-};
-
-int main() {
-    { // explicit noexcept test
-        static_assert(!std::is_nothrow_constructible<std::pair<ExplicitT, ExplicitT>, int, int>::value, "");
-        static_assert(!std::is_nothrow_constructible<std::pair<ExplicitNothrowT, ExplicitT>, int, int>::value, "");
-        static_assert(!std::is_nothrow_constructible<std::pair<ExplicitT, ExplicitNothrowT>, int, int>::value, "");
-        static_assert( std::is_nothrow_constructible<std::pair<ExplicitNothrowT, ExplicitNothrowT>, int, int>::value, "");
-    }
-    { // implicit noexcept test
-        static_assert(!std::is_nothrow_constructible<std::pair<ImplicitT, ImplicitT>, int, int>::value, "");
-        static_assert(!std::is_nothrow_constructible<std::pair<ImplicitNothrowT, ImplicitT>, int, int>::value, "");
-        static_assert(!std::is_nothrow_constructible<std::pair<ImplicitT, ImplicitNothrowT>, int, int>::value, "");
-        static_assert( std::is_nothrow_constructible<std::pair<ImplicitNothrowT, ImplicitNothrowT>, int, int>::value, "");
-    }
-}
diff --git a/test/libcxx/utilities/utility/pairs/pairs.pair/const_first_const_second.pass.cpp b/test/libcxx/utilities/utility/pairs/pairs.pair/const_first_const_second.pass.cpp
deleted file mode 100644
index 6a24012..0000000
--- a/test/libcxx/utilities/utility/pairs/pairs.pair/const_first_const_second.pass.cpp
+++ /dev/null
@@ -1,62 +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
-
-// <utility>
-
-// template <class T1, class T2> struct pair
-
-// pair(const T1& x, const T2& y);
-
-#include <utility>
-
-
-struct ExplicitT {
-    constexpr explicit ExplicitT(int x) : value(x) {}
-    constexpr explicit ExplicitT(ExplicitT const& o) : value(o.value) {}
-    int value;
-};
-
-struct ImplicitT {
-    constexpr ImplicitT(int x) : value(x) {}
-    constexpr ImplicitT(ImplicitT const& o) : value(o.value) {}
-    int value;
-};
-
-struct ExplicitNothrowT {
-    explicit ExplicitNothrowT(ExplicitNothrowT const&) noexcept {}
-};
-
-struct ImplicitNothrowT {
-    ImplicitNothrowT(ImplicitNothrowT const&) noexcept {}
-};
-
-int main() {
-    { // explicit noexcept test
-        static_assert(!std::is_nothrow_constructible<std::pair<ExplicitT, ExplicitT>,
-                                                     ExplicitT const&, ExplicitT const&>::value, "");
-        static_assert(!std::is_nothrow_constructible<std::pair<ExplicitNothrowT, ExplicitT>,
-                                                     ExplicitNothrowT const&, ExplicitT const&>::value, "");
-        static_assert(!std::is_nothrow_constructible<std::pair<ExplicitT, ExplicitNothrowT>,
-                                                     ExplicitT const&, ExplicitNothrowT const&>::value, "");
-        static_assert( std::is_nothrow_constructible<std::pair<ExplicitNothrowT, ExplicitNothrowT>,
-                                                     ExplicitNothrowT const&, ExplicitNothrowT const&>::value, "");
-    }
-    { // implicit noexcept test
-        static_assert(!std::is_nothrow_constructible<std::pair<ImplicitT, ImplicitT>,
-                                                     ImplicitT const&, ImplicitT const&>::value, "");
-        static_assert(!std::is_nothrow_constructible<std::pair<ImplicitNothrowT, ImplicitT>,
-                                                     ImplicitNothrowT const&, ImplicitT const&>::value, "");
-        static_assert(!std::is_nothrow_constructible<std::pair<ImplicitT, ImplicitNothrowT>,
-                                                     ImplicitT const&, ImplicitNothrowT const&>::value, "");
-        static_assert( std::is_nothrow_constructible<std::pair<ImplicitNothrowT, ImplicitNothrowT>,
-                                                     ImplicitNothrowT const&, ImplicitNothrowT const&>::value, "");
-    }
-}
diff --git a/test/libcxx/utilities/utility/pairs/pairs.pair/const_pair_U_V.pass.cpp b/test/libcxx/utilities/utility/pairs/pairs.pair/const_pair_U_V.pass.cpp
deleted file mode 100644
index edb3bbf..0000000
--- a/test/libcxx/utilities/utility/pairs/pairs.pair/const_pair_U_V.pass.cpp
+++ /dev/null
@@ -1,64 +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
-
-// <utility>
-
-// template <class T1, class T2> struct pair
-
-// template <class U, class V> EXPLICIT constexpr pair(const pair<U, V>& p);
-
-#include <utility>
-
-
-struct ExplicitT {
-    constexpr explicit ExplicitT(int x) : value(x) {}
-    constexpr explicit ExplicitT(ExplicitT const& o) : value(o.value) {}
-    int value;
-};
-
-struct ImplicitT {
-    constexpr ImplicitT(int x) : value(x) {}
-    constexpr ImplicitT(ImplicitT const& o) : value(o.value) {}
-    int value;
-};
-
-struct ExplicitNothrowT {
-    explicit ExplicitNothrowT(int x) noexcept : value(x) {}
-    int value;
-};
-
-struct ImplicitNothrowT {
-    ImplicitNothrowT(int x) noexcept : value(x) {}
-    int value;
-};
-
-int main() {
-    { // explicit noexcept test
-        static_assert(!std::is_nothrow_constructible<std::pair<ExplicitT, ExplicitT>,
-                                                     std::pair<int, int> const&>::value, "");
-        static_assert(!std::is_nothrow_constructible<std::pair<ExplicitNothrowT, ExplicitT>,
-                                                     std::pair<int, int> const&>::value, "");
-        static_assert(!std::is_nothrow_constructible<std::pair<ExplicitT, ExplicitNothrowT>,
-                                                     std::pair<int, int> const&>::value, "");
-        static_assert( std::is_nothrow_constructible<std::pair<ExplicitNothrowT, ExplicitNothrowT>,
-                                                     std::pair<int, int> const&>::value, "");
-    }
-    { // implicit noexcept test
-        static_assert(!std::is_nothrow_constructible<std::pair<ImplicitT, ImplicitT>,
-                                                     std::pair<int, int> const&>::value, "");
-        static_assert(!std::is_nothrow_constructible<std::pair<ImplicitNothrowT, ImplicitT>,
-                                                     std::pair<int, int> const&>::value, "");
-        static_assert(!std::is_nothrow_constructible<std::pair<ImplicitT, ImplicitNothrowT>,
-                                                     std::pair<int, int> const&>::value, "");
-        static_assert( std::is_nothrow_constructible<std::pair<ImplicitNothrowT, ImplicitNothrowT>,
-                                                     std::pair<int, int> const&>::value, "");
-    }
-}
diff --git a/test/libcxx/utilities/utility/pairs/pairs.pair/default.pass.cpp b/test/libcxx/utilities/utility/pairs/pairs.pair/default.pass.cpp
deleted file mode 100644
index e513d55..0000000
--- a/test/libcxx/utilities/utility/pairs/pairs.pair/default.pass.cpp
+++ /dev/null
@@ -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.
-//
-//===----------------------------------------------------------------------===//
-
-// <utility>
-
-// template <class T1, class T2> struct pair
-
-// constexpr pair();
-
-
-#include <utility>
-#include <type_traits>
-
-#include "archetypes.hpp"
-
-
-int main() {
-    using NonThrowingDefault = NonThrowingTypes::DefaultOnly;
-    using ThrowingDefault = NonTrivialTypes::DefaultOnly;
-    static_assert(!std::is_nothrow_default_constructible<std::pair<ThrowingDefault, ThrowingDefault>>::value, "");
-    static_assert(!std::is_nothrow_default_constructible<std::pair<NonThrowingDefault, ThrowingDefault>>::value, "");
-    static_assert(!std::is_nothrow_default_constructible<std::pair<ThrowingDefault, NonThrowingDefault>>::value, "");
-    static_assert( std::is_nothrow_default_constructible<std::pair<NonThrowingDefault, NonThrowingDefault>>::value, "");
-}
diff --git a/test/libcxx/utilities/utility/pairs/pairs.pair/piecewise.pass.cpp b/test/libcxx/utilities/utility/pairs/pairs.pair/piecewise.pass.cpp
deleted file mode 100644
index 81dad3b..0000000
--- a/test/libcxx/utilities/utility/pairs/pairs.pair/piecewise.pass.cpp
+++ /dev/null
@@ -1,38 +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
-
-// <utility>
-
-// template <class T1, class T2> struct pair
-
-// template <class... Args1, class... Args2>
-//     pair(piecewise_construct_t, tuple<Args1...> first_args,
-//                                 tuple<Args2...> second_args);
-
-#include <tuple>
-#include <type_traits>
-#include <utility>
-
-#include "archetypes.hpp"
-
-
-int main() {
-    using NonThrowingConvert = NonThrowingTypes::ConvertingType;
-    using ThrowingConvert = NonTrivialTypes::ConvertingType;
-    static_assert(!std::is_nothrow_constructible<std::pair<ThrowingConvert, ThrowingConvert>,
-                                                 std::piecewise_construct_t, std::tuple<int, int>, std::tuple<long, long>>::value, "");
-    static_assert(!std::is_nothrow_constructible<std::pair<NonThrowingConvert, ThrowingConvert>,
-                                                 std::piecewise_construct_t, std::tuple<int, int>, std::tuple<long, long>>::value, "");
-    static_assert(!std::is_nothrow_constructible<std::pair<ThrowingConvert, NonThrowingConvert>,
-                                                 std::piecewise_construct_t, std::tuple<int, int>, std::tuple<long, long>>::value, "");
-    static_assert( std::is_nothrow_constructible<std::pair<NonThrowingConvert, NonThrowingConvert>,
-                                                 std::piecewise_construct_t, std::tuple<int, int>, std::tuple<long, long>>::value, "");
-}
diff --git a/test/libcxx/utilities/utility/pairs/pairs.pair/rv_pair_U_V.pass.cpp b/test/libcxx/utilities/utility/pairs/pairs.pair/rv_pair_U_V.pass.cpp
deleted file mode 100644
index 5d8d362..0000000
--- a/test/libcxx/utilities/utility/pairs/pairs.pair/rv_pair_U_V.pass.cpp
+++ /dev/null
@@ -1,63 +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
-
-// <utility>
-
-// template <class T1, class T2> struct pair
-
-// template <class U, class V> pair(pair<U, V>&& p);
-
-#include <type_traits>
-#include <utility>
-
-
-struct ExplicitT {
-    constexpr explicit ExplicitT(int x) : value(x) {}
-    int value;
-};
-
-struct ImplicitT {
-    constexpr ImplicitT(int x) : value(x) {}
-    int value;
-};
-
-struct ExplicitNothrowT {
-    explicit ExplicitNothrowT(int x) noexcept : value(x) {}
-    int value;
-};
-
-struct ImplicitNothrowT {
-    ImplicitNothrowT(int x) noexcept : value(x) {}
-    int value;
-};
-
-int main() {
-    { // explicit noexcept test
-        static_assert(!std::is_nothrow_constructible<std::pair<ExplicitT, ExplicitT>,
-                                                     std::pair<int, int>&&>::value, "");
-        static_assert(!std::is_nothrow_constructible<std::pair<ExplicitNothrowT, ExplicitT>,
-                                                     std::pair<int, int>&&>::value, "");
-        static_assert(!std::is_nothrow_constructible<std::pair<ExplicitT, ExplicitNothrowT>,
-                                                     std::pair<int, int>&&>::value, "");
-        static_assert( std::is_nothrow_constructible<std::pair<ExplicitNothrowT, ExplicitNothrowT>,
-                                                     std::pair<int, int>&&>::value, "");
-    }
-    { // implicit noexcept test
-        static_assert(!std::is_nothrow_constructible<std::pair<ImplicitT, ImplicitT>,
-                                                     std::pair<int, int>&&>::value, "");
-        static_assert(!std::is_nothrow_constructible<std::pair<ImplicitNothrowT, ImplicitT>,
-                                                     std::pair<int, int>&&>::value, "");
-        static_assert(!std::is_nothrow_constructible<std::pair<ImplicitT, ImplicitNothrowT>,
-                                                     std::pair<int, int>&&>::value, "");
-        static_assert( std::is_nothrow_constructible<std::pair<ImplicitNothrowT, ImplicitNothrowT>,
-                                                     std::pair<int, int>&&>::value, "");
-    }
-}
diff --git a/test/std/utilities/utility/pairs/pairs.pair/piecewise.pass.cpp b/test/std/utilities/utility/pairs/pairs.pair/piecewise.pass.cpp
index aa86949..c738ada 100644
--- a/test/std/utilities/utility/pairs/pairs.pair/piecewise.pass.cpp
+++ b/test/std/utilities/utility/pairs/pairs.pair/piecewise.pass.cpp
@@ -17,10 +17,9 @@
 //     pair(piecewise_construct_t, tuple<Args1...> first_args,
 //                                 tuple<Args2...> second_args);
 
-#include <cassert>
-#include <tuple>
 #include <utility>
-
+#include <tuple>
+#include <cassert>
 
 int main()
 {
diff --git a/test/support/archetypes.hpp b/test/support/archetypes.hpp
index a0ea7c3..1695a6f 100644
--- a/test/support/archetypes.hpp
+++ b/test/support/archetypes.hpp
@@ -225,6 +225,7 @@
 #include "archetypes.ipp"
 }
 
+
 //============================================================================//
 //
 namespace NonConstexprTypes {
@@ -241,17 +242,11 @@
 }
 
 //============================================================================//
-// Non-throwing implicit test types
-namespace NonThrowingTypes {
-#define DEFINE_NOEXCEPT noexcept
-#include "archetypes.ipp"
-}
-
-//============================================================================//
 // Non-Trivially Copyable Implicit Test Types
 namespace NonTrivialTypes {
 #define DEFINE_CTOR {}
 #define DEFINE_ASSIGN { return *this; }
+#define DEFINE_DEFAULT_CTOR = default
 #include "archetypes.ipp"
 }
 
diff --git a/test/support/archetypes.ipp b/test/support/archetypes.ipp
index 943dcf9..3604501 100644
--- a/test/support/archetypes.ipp
+++ b/test/support/archetypes.ipp
@@ -5,9 +5,6 @@
 #ifndef DEFINE_EXPLICIT
 #define DEFINE_EXPLICIT
 #endif
-#ifndef DEFINE_NOEXCEPT
-#define DEFINE_NOEXCEPT
-#endif
 #ifndef DEFINE_CONSTEXPR
 #ifdef TEST_WORKAROUND_EDG_EXPLICIT_CONSTEXPR
 #define DEFINE_CONSTEXPR
@@ -39,114 +36,114 @@
   using Base = DEFINE_BASE(AllCtors);
   using Base::Base;
   using Base::operator=;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR AllCtors() DEFINE_NOEXCEPT DEFINE_DEFAULT_CTOR;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR AllCtors(AllCtors const&) DEFINE_NOEXCEPT DEFINE_CTOR;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR AllCtors(AllCtors &&) DEFINE_NOEXCEPT DEFINE_CTOR;
-  DEFINE_ASSIGN_CONSTEXPR AllCtors& operator=(AllCtors const&) DEFINE_NOEXCEPT DEFINE_ASSIGN;
-  DEFINE_ASSIGN_CONSTEXPR AllCtors& operator=(AllCtors &&) DEFINE_NOEXCEPT DEFINE_ASSIGN;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR AllCtors() DEFINE_DEFAULT_CTOR;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR AllCtors(AllCtors const&) DEFINE_CTOR;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR AllCtors(AllCtors &&) DEFINE_CTOR;
+  DEFINE_ASSIGN_CONSTEXPR AllCtors& operator=(AllCtors const&) DEFINE_ASSIGN;
+  DEFINE_ASSIGN_CONSTEXPR AllCtors& operator=(AllCtors &&) DEFINE_ASSIGN;
   DEFINE_DTOR(AllCtors)
 };
 
 struct NoCtors : DEFINE_BASE(NoCtors) {
   using Base = DEFINE_BASE(NoCtors);
-  DEFINE_EXPLICIT NoCtors() DEFINE_NOEXCEPT = delete;
-  DEFINE_EXPLICIT NoCtors(NoCtors const&) DEFINE_NOEXCEPT = delete;
-  NoCtors& operator=(NoCtors const&) DEFINE_NOEXCEPT = delete;
+  DEFINE_EXPLICIT NoCtors() = delete;
+  DEFINE_EXPLICIT NoCtors(NoCtors const&) = delete;
+  NoCtors& operator=(NoCtors const&) = delete;
   DEFINE_DTOR(NoCtors)
 };
 
 struct NoDefault : DEFINE_BASE(NoDefault) {
   using Base = DEFINE_BASE(NoDefault);
   using Base::Base;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR NoDefault() DEFINE_NOEXCEPT = delete;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR NoDefault() = delete;
   DEFINE_DTOR(NoDefault)
 };
 
 struct DefaultOnly : DEFINE_BASE(DefaultOnly) {
   using Base = DEFINE_BASE(DefaultOnly);
   using Base::Base;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR DefaultOnly() DEFINE_NOEXCEPT DEFINE_DEFAULT_CTOR;
-  DefaultOnly(DefaultOnly const&) DEFINE_NOEXCEPT = delete;
-  DefaultOnly& operator=(DefaultOnly const&) DEFINE_NOEXCEPT = delete;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR DefaultOnly() DEFINE_DEFAULT_CTOR;
+  DefaultOnly(DefaultOnly const&) = delete;
+  DefaultOnly& operator=(DefaultOnly const&) = delete;
   DEFINE_DTOR(DefaultOnly)
 };
 
 struct Copyable : DEFINE_BASE(Copyable) {
   using Base = DEFINE_BASE(Copyable);
   using Base::Base;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR Copyable() DEFINE_NOEXCEPT DEFINE_DEFAULT_CTOR;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR Copyable(Copyable const &) DEFINE_NOEXCEPT DEFINE_CTOR;
-  Copyable &operator=(Copyable const &) DEFINE_NOEXCEPT DEFINE_ASSIGN;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR Copyable() DEFINE_DEFAULT_CTOR;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR Copyable(Copyable const &) DEFINE_CTOR;
+  Copyable &operator=(Copyable const &) DEFINE_ASSIGN;
   DEFINE_DTOR(Copyable)
 };
 
 struct CopyOnly : DEFINE_BASE(CopyOnly) {
   using Base = DEFINE_BASE(CopyOnly);
   using Base::Base;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyOnly() DEFINE_NOEXCEPT DEFINE_DEFAULT_CTOR;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyOnly(CopyOnly const &) DEFINE_NOEXCEPT DEFINE_CTOR;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyOnly(CopyOnly &&) DEFINE_NOEXCEPT = delete;
-  CopyOnly &operator=(CopyOnly const &) DEFINE_NOEXCEPT DEFINE_ASSIGN;
-  CopyOnly &operator=(CopyOnly &&) DEFINE_NOEXCEPT = delete;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyOnly() DEFINE_DEFAULT_CTOR;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyOnly(CopyOnly const &) DEFINE_CTOR;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyOnly(CopyOnly &&) = delete;
+  CopyOnly &operator=(CopyOnly const &) DEFINE_ASSIGN;
+  CopyOnly &operator=(CopyOnly &&) = delete;
   DEFINE_DTOR(CopyOnly)
 };
 
 struct NonCopyable : DEFINE_BASE(NonCopyable) {
   using Base = DEFINE_BASE(NonCopyable);
   using Base::Base;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR NonCopyable() DEFINE_NOEXCEPT DEFINE_DEFAULT_CTOR;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR NonCopyable(NonCopyable const &) DEFINE_NOEXCEPT = delete;
-  NonCopyable &operator=(NonCopyable const &) DEFINE_NOEXCEPT = delete;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR NonCopyable() DEFINE_DEFAULT_CTOR;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR NonCopyable(NonCopyable const &) = delete;
+  NonCopyable &operator=(NonCopyable const &) = delete;
   DEFINE_DTOR(NonCopyable)
 };
 
 struct MoveOnly : DEFINE_BASE(MoveOnly) {
   using Base = DEFINE_BASE(MoveOnly);
   using Base::Base;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR MoveOnly() DEFINE_NOEXCEPT DEFINE_DEFAULT_CTOR;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR MoveOnly(MoveOnly &&) DEFINE_NOEXCEPT DEFINE_CTOR;
-  MoveOnly &operator=(MoveOnly &&) DEFINE_NOEXCEPT DEFINE_ASSIGN;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR MoveOnly() DEFINE_DEFAULT_CTOR;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR MoveOnly(MoveOnly &&) DEFINE_CTOR;
+  MoveOnly &operator=(MoveOnly &&) DEFINE_ASSIGN;
   DEFINE_DTOR(MoveOnly)
 };
 
 struct CopyAssignable : DEFINE_BASE(CopyAssignable) {
   using Base = DEFINE_BASE(CopyAssignable);
   using Base::Base;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyAssignable() DEFINE_NOEXCEPT = delete;
-  CopyAssignable& operator=(CopyAssignable const&) DEFINE_NOEXCEPT DEFINE_ASSIGN;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyAssignable() = delete;
+  CopyAssignable& operator=(CopyAssignable const&) DEFINE_ASSIGN;
   DEFINE_DTOR(CopyAssignable)
 };
 
 struct CopyAssignOnly : DEFINE_BASE(CopyAssignOnly) {
   using Base = DEFINE_BASE(CopyAssignOnly);
   using Base::Base;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyAssignOnly() DEFINE_NOEXCEPT = delete;
-  CopyAssignOnly& operator=(CopyAssignOnly const&) DEFINE_NOEXCEPT DEFINE_ASSIGN;
-  CopyAssignOnly& operator=(CopyAssignOnly &&) DEFINE_NOEXCEPT = delete;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyAssignOnly() = delete;
+  CopyAssignOnly& operator=(CopyAssignOnly const&) DEFINE_ASSIGN;
+  CopyAssignOnly& operator=(CopyAssignOnly &&) = delete;
   DEFINE_DTOR(CopyAssignOnly)
 };
 
 struct MoveAssignOnly : DEFINE_BASE(MoveAssignOnly) {
   using Base = DEFINE_BASE(MoveAssignOnly);
   using Base::Base;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR MoveAssignOnly() DEFINE_NOEXCEPT = delete;
-  MoveAssignOnly& operator=(MoveAssignOnly const&) DEFINE_NOEXCEPT = delete;
-  MoveAssignOnly& operator=(MoveAssignOnly &&) DEFINE_NOEXCEPT DEFINE_ASSIGN;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR MoveAssignOnly() = delete;
+  MoveAssignOnly& operator=(MoveAssignOnly const&) = delete;
+  MoveAssignOnly& operator=(MoveAssignOnly &&) DEFINE_ASSIGN;
   DEFINE_DTOR(MoveAssignOnly)
 };
 
 struct ConvertingType : DEFINE_BASE(ConvertingType) {
   using Base = DEFINE_BASE(ConvertingType);
   using Base::Base;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR ConvertingType() DEFINE_NOEXCEPT DEFINE_DEFAULT_CTOR;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR ConvertingType(ConvertingType const&) DEFINE_NOEXCEPT DEFINE_CTOR;
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR ConvertingType(ConvertingType &&) DEFINE_NOEXCEPT DEFINE_CTOR;
-  ConvertingType& operator=(ConvertingType const&) DEFINE_NOEXCEPT DEFINE_ASSIGN;
-  ConvertingType& operator=(ConvertingType &&) DEFINE_NOEXCEPT DEFINE_ASSIGN;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR ConvertingType() DEFINE_DEFAULT_CTOR;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR ConvertingType(ConvertingType const&) DEFINE_CTOR;
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR ConvertingType(ConvertingType &&) DEFINE_CTOR;
+  ConvertingType& operator=(ConvertingType const&) DEFINE_ASSIGN;
+  ConvertingType& operator=(ConvertingType &&) DEFINE_ASSIGN;
   template <class ...Args>
-  DEFINE_EXPLICIT DEFINE_CONSTEXPR ConvertingType(Args&&...) DEFINE_NOEXCEPT {}
+  DEFINE_EXPLICIT DEFINE_CONSTEXPR ConvertingType(Args&&...) {}
   template <class Arg>
-  ConvertingType& operator=(Arg&&) DEFINE_NOEXCEPT { return *this; }
+  ConvertingType& operator=(Arg&&) { return *this; }
   DEFINE_DTOR(ConvertingType)
 };
 
@@ -168,7 +165,6 @@
 
 #undef DEFINE_BASE
 #undef DEFINE_EXPLICIT
-#undef DEFINE_NOEXCEPT
 #undef DEFINE_CONSTEXPR
 #undef DEFINE_ASSIGN_CONSTEXPR
 #undef DEFINE_CTOR