forked from OSchip/llvm-project
Revert "[pair] Mark constructors as conditionally noexcept"
This broke the tests on Linux. Reverting until I find out why the tests are broken (tomorrow). llvm-svn: 348825
This commit is contained in:
parent
76cce3b2bd
commit
d5a20703c4
|
@ -409,17 +409,13 @@ struct _LIBCPP_TEMPLATE_VIS pair
|
||||||
_CheckArgsDep<_Dummy>::template __enable_default<_T1, _T2>()
|
_CheckArgsDep<_Dummy>::template __enable_default<_T1, _T2>()
|
||||||
> = false>
|
> = false>
|
||||||
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
|
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
|
||||||
pair() _NOEXCEPT_(is_nothrow_default_constructible<first_type>::value &&
|
pair() : first(), second() {}
|
||||||
is_nothrow_default_constructible<second_type>::value)
|
|
||||||
: first(), second() {}
|
|
||||||
|
|
||||||
template <bool _Dummy = true, _EnableB<
|
template <bool _Dummy = true, _EnableB<
|
||||||
_CheckArgsDep<_Dummy>::template __enable_explicit<_T1 const&, _T2 const&>()
|
_CheckArgsDep<_Dummy>::template __enable_explicit<_T1 const&, _T2 const&>()
|
||||||
> = false>
|
> = false>
|
||||||
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
|
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
|
||||||
explicit pair(_T1 const& __t1, _T2 const& __t2)
|
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) {}
|
: first(__t1), second(__t2) {}
|
||||||
|
|
||||||
template<bool _Dummy = true, _EnableB<
|
template<bool _Dummy = true, _EnableB<
|
||||||
|
@ -427,8 +423,6 @@ struct _LIBCPP_TEMPLATE_VIS pair
|
||||||
> = false>
|
> = false>
|
||||||
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
|
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
|
||||||
pair(_T1 const& __t1, _T2 const& __t2)
|
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) {}
|
: first(__t1), second(__t2) {}
|
||||||
|
|
||||||
template<class _U1, class _U2, _EnableB<
|
template<class _U1, class _U2, _EnableB<
|
||||||
|
@ -436,8 +430,6 @@ struct _LIBCPP_TEMPLATE_VIS pair
|
||||||
> = false>
|
> = false>
|
||||||
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
|
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
|
||||||
explicit pair(_U1&& __u1, _U2&& __u2)
|
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)) {}
|
: first(_VSTD::forward<_U1>(__u1)), second(_VSTD::forward<_U2>(__u2)) {}
|
||||||
|
|
||||||
template<class _U1, class _U2, _EnableB<
|
template<class _U1, class _U2, _EnableB<
|
||||||
|
@ -445,8 +437,6 @@ struct _LIBCPP_TEMPLATE_VIS pair
|
||||||
> = false>
|
> = false>
|
||||||
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
|
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
|
||||||
pair(_U1&& __u1, _U2&& __u2)
|
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)) {}
|
: first(_VSTD::forward<_U1>(__u1)), second(_VSTD::forward<_U2>(__u2)) {}
|
||||||
|
|
||||||
template<class _U1, class _U2, _EnableB<
|
template<class _U1, class _U2, _EnableB<
|
||||||
|
@ -454,8 +444,6 @@ struct _LIBCPP_TEMPLATE_VIS pair
|
||||||
> = false>
|
> = false>
|
||||||
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
|
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
|
||||||
explicit pair(pair<_U1, _U2> const& __p)
|
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) {}
|
: first(__p.first), second(__p.second) {}
|
||||||
|
|
||||||
template<class _U1, class _U2, _EnableB<
|
template<class _U1, class _U2, _EnableB<
|
||||||
|
@ -463,8 +451,6 @@ struct _LIBCPP_TEMPLATE_VIS pair
|
||||||
> = false>
|
> = false>
|
||||||
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
|
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
|
||||||
pair(pair<_U1, _U2> const& __p)
|
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) {}
|
: first(__p.first), second(__p.second) {}
|
||||||
|
|
||||||
template<class _U1, class _U2, _EnableB<
|
template<class _U1, class _U2, _EnableB<
|
||||||
|
@ -472,8 +458,6 @@ struct _LIBCPP_TEMPLATE_VIS pair
|
||||||
> = false>
|
> = false>
|
||||||
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
|
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
|
||||||
explicit pair(pair<_U1, _U2>&&__p)
|
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)) {}
|
: first(_VSTD::forward<_U1>(__p.first)), second(_VSTD::forward<_U2>(__p.second)) {}
|
||||||
|
|
||||||
template<class _U1, class _U2, _EnableB<
|
template<class _U1, class _U2, _EnableB<
|
||||||
|
@ -481,8 +465,6 @@ struct _LIBCPP_TEMPLATE_VIS pair
|
||||||
> = false>
|
> = false>
|
||||||
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
|
_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
|
||||||
pair(pair<_U1, _U2>&& __p)
|
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)) {}
|
: first(_VSTD::forward<_U1>(__p.first)), second(_VSTD::forward<_U2>(__p.second)) {}
|
||||||
|
|
||||||
template<class _Tuple, _EnableB<
|
template<class _Tuple, _EnableB<
|
||||||
|
@ -505,8 +487,6 @@ struct _LIBCPP_TEMPLATE_VIS pair
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
pair(piecewise_construct_t __pc,
|
pair(piecewise_construct_t __pc,
|
||||||
tuple<_Args1...> __first_args, tuple<_Args2...> __second_args)
|
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,
|
: pair(__pc, __first_args, __second_args,
|
||||||
typename __make_tuple_indices<sizeof...(_Args1)>::type(),
|
typename __make_tuple_indices<sizeof...(_Args1)>::type(),
|
||||||
typename __make_tuple_indices<sizeof...(_Args2) >::type()) {}
|
typename __make_tuple_indices<sizeof...(_Args2) >::type()) {}
|
||||||
|
|
|
@ -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, "");
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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, "");
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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, "");
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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, "");
|
|
||||||
}
|
|
|
@ -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, "");
|
|
||||||
}
|
|
|
@ -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, "");
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -17,10 +17,9 @@
|
||||||
// pair(piecewise_construct_t, tuple<Args1...> first_args,
|
// pair(piecewise_construct_t, tuple<Args1...> first_args,
|
||||||
// tuple<Args2...> second_args);
|
// tuple<Args2...> second_args);
|
||||||
|
|
||||||
#include <cassert>
|
|
||||||
#include <tuple>
|
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
#include <tuple>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
|
|
|
@ -225,6 +225,7 @@ namespace ExplicitTypes {
|
||||||
#include "archetypes.ipp"
|
#include "archetypes.ipp"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//============================================================================//
|
//============================================================================//
|
||||||
//
|
//
|
||||||
namespace NonConstexprTypes {
|
namespace NonConstexprTypes {
|
||||||
|
@ -240,18 +241,12 @@ namespace NonLiteralTypes {
|
||||||
#include "archetypes.ipp"
|
#include "archetypes.ipp"
|
||||||
}
|
}
|
||||||
|
|
||||||
//============================================================================//
|
|
||||||
// Non-throwing implicit test types
|
|
||||||
namespace NonThrowingTypes {
|
|
||||||
#define DEFINE_NOEXCEPT noexcept
|
|
||||||
#include "archetypes.ipp"
|
|
||||||
}
|
|
||||||
|
|
||||||
//============================================================================//
|
//============================================================================//
|
||||||
// Non-Trivially Copyable Implicit Test Types
|
// Non-Trivially Copyable Implicit Test Types
|
||||||
namespace NonTrivialTypes {
|
namespace NonTrivialTypes {
|
||||||
#define DEFINE_CTOR {}
|
#define DEFINE_CTOR {}
|
||||||
#define DEFINE_ASSIGN { return *this; }
|
#define DEFINE_ASSIGN { return *this; }
|
||||||
|
#define DEFINE_DEFAULT_CTOR = default
|
||||||
#include "archetypes.ipp"
|
#include "archetypes.ipp"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,9 +5,6 @@
|
||||||
#ifndef DEFINE_EXPLICIT
|
#ifndef DEFINE_EXPLICIT
|
||||||
#define DEFINE_EXPLICIT
|
#define DEFINE_EXPLICIT
|
||||||
#endif
|
#endif
|
||||||
#ifndef DEFINE_NOEXCEPT
|
|
||||||
#define DEFINE_NOEXCEPT
|
|
||||||
#endif
|
|
||||||
#ifndef DEFINE_CONSTEXPR
|
#ifndef DEFINE_CONSTEXPR
|
||||||
#ifdef TEST_WORKAROUND_EDG_EXPLICIT_CONSTEXPR
|
#ifdef TEST_WORKAROUND_EDG_EXPLICIT_CONSTEXPR
|
||||||
#define DEFINE_CONSTEXPR
|
#define DEFINE_CONSTEXPR
|
||||||
|
@ -39,114 +36,114 @@ struct AllCtors : DEFINE_BASE(AllCtors) {
|
||||||
using Base = DEFINE_BASE(AllCtors);
|
using Base = DEFINE_BASE(AllCtors);
|
||||||
using Base::Base;
|
using Base::Base;
|
||||||
using Base::operator=;
|
using Base::operator=;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR AllCtors() DEFINE_NOEXCEPT DEFINE_DEFAULT_CTOR;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR AllCtors() DEFINE_DEFAULT_CTOR;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR AllCtors(AllCtors const&) DEFINE_NOEXCEPT DEFINE_CTOR;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR AllCtors(AllCtors const&) DEFINE_CTOR;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR AllCtors(AllCtors &&) DEFINE_NOEXCEPT DEFINE_CTOR;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR AllCtors(AllCtors &&) DEFINE_CTOR;
|
||||||
DEFINE_ASSIGN_CONSTEXPR AllCtors& operator=(AllCtors const&) DEFINE_NOEXCEPT DEFINE_ASSIGN;
|
DEFINE_ASSIGN_CONSTEXPR AllCtors& operator=(AllCtors const&) DEFINE_ASSIGN;
|
||||||
DEFINE_ASSIGN_CONSTEXPR AllCtors& operator=(AllCtors &&) DEFINE_NOEXCEPT DEFINE_ASSIGN;
|
DEFINE_ASSIGN_CONSTEXPR AllCtors& operator=(AllCtors &&) DEFINE_ASSIGN;
|
||||||
DEFINE_DTOR(AllCtors)
|
DEFINE_DTOR(AllCtors)
|
||||||
};
|
};
|
||||||
|
|
||||||
struct NoCtors : DEFINE_BASE(NoCtors) {
|
struct NoCtors : DEFINE_BASE(NoCtors) {
|
||||||
using Base = DEFINE_BASE(NoCtors);
|
using Base = DEFINE_BASE(NoCtors);
|
||||||
DEFINE_EXPLICIT NoCtors() DEFINE_NOEXCEPT = delete;
|
DEFINE_EXPLICIT NoCtors() = delete;
|
||||||
DEFINE_EXPLICIT NoCtors(NoCtors const&) DEFINE_NOEXCEPT = delete;
|
DEFINE_EXPLICIT NoCtors(NoCtors const&) = delete;
|
||||||
NoCtors& operator=(NoCtors const&) DEFINE_NOEXCEPT = delete;
|
NoCtors& operator=(NoCtors const&) = delete;
|
||||||
DEFINE_DTOR(NoCtors)
|
DEFINE_DTOR(NoCtors)
|
||||||
};
|
};
|
||||||
|
|
||||||
struct NoDefault : DEFINE_BASE(NoDefault) {
|
struct NoDefault : DEFINE_BASE(NoDefault) {
|
||||||
using Base = DEFINE_BASE(NoDefault);
|
using Base = DEFINE_BASE(NoDefault);
|
||||||
using Base::Base;
|
using Base::Base;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR NoDefault() DEFINE_NOEXCEPT = delete;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR NoDefault() = delete;
|
||||||
DEFINE_DTOR(NoDefault)
|
DEFINE_DTOR(NoDefault)
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DefaultOnly : DEFINE_BASE(DefaultOnly) {
|
struct DefaultOnly : DEFINE_BASE(DefaultOnly) {
|
||||||
using Base = DEFINE_BASE(DefaultOnly);
|
using Base = DEFINE_BASE(DefaultOnly);
|
||||||
using Base::Base;
|
using Base::Base;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR DefaultOnly() DEFINE_NOEXCEPT DEFINE_DEFAULT_CTOR;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR DefaultOnly() DEFINE_DEFAULT_CTOR;
|
||||||
DefaultOnly(DefaultOnly const&) DEFINE_NOEXCEPT = delete;
|
DefaultOnly(DefaultOnly const&) = delete;
|
||||||
DefaultOnly& operator=(DefaultOnly const&) DEFINE_NOEXCEPT = delete;
|
DefaultOnly& operator=(DefaultOnly const&) = delete;
|
||||||
DEFINE_DTOR(DefaultOnly)
|
DEFINE_DTOR(DefaultOnly)
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Copyable : DEFINE_BASE(Copyable) {
|
struct Copyable : DEFINE_BASE(Copyable) {
|
||||||
using Base = DEFINE_BASE(Copyable);
|
using Base = DEFINE_BASE(Copyable);
|
||||||
using Base::Base;
|
using Base::Base;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR Copyable() DEFINE_NOEXCEPT DEFINE_DEFAULT_CTOR;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR Copyable() DEFINE_DEFAULT_CTOR;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR Copyable(Copyable const &) DEFINE_NOEXCEPT DEFINE_CTOR;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR Copyable(Copyable const &) DEFINE_CTOR;
|
||||||
Copyable &operator=(Copyable const &) DEFINE_NOEXCEPT DEFINE_ASSIGN;
|
Copyable &operator=(Copyable const &) DEFINE_ASSIGN;
|
||||||
DEFINE_DTOR(Copyable)
|
DEFINE_DTOR(Copyable)
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CopyOnly : DEFINE_BASE(CopyOnly) {
|
struct CopyOnly : DEFINE_BASE(CopyOnly) {
|
||||||
using Base = DEFINE_BASE(CopyOnly);
|
using Base = DEFINE_BASE(CopyOnly);
|
||||||
using Base::Base;
|
using Base::Base;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyOnly() DEFINE_NOEXCEPT DEFINE_DEFAULT_CTOR;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyOnly() DEFINE_DEFAULT_CTOR;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyOnly(CopyOnly const &) DEFINE_NOEXCEPT DEFINE_CTOR;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyOnly(CopyOnly const &) DEFINE_CTOR;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyOnly(CopyOnly &&) DEFINE_NOEXCEPT = delete;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyOnly(CopyOnly &&) = delete;
|
||||||
CopyOnly &operator=(CopyOnly const &) DEFINE_NOEXCEPT DEFINE_ASSIGN;
|
CopyOnly &operator=(CopyOnly const &) DEFINE_ASSIGN;
|
||||||
CopyOnly &operator=(CopyOnly &&) DEFINE_NOEXCEPT = delete;
|
CopyOnly &operator=(CopyOnly &&) = delete;
|
||||||
DEFINE_DTOR(CopyOnly)
|
DEFINE_DTOR(CopyOnly)
|
||||||
};
|
};
|
||||||
|
|
||||||
struct NonCopyable : DEFINE_BASE(NonCopyable) {
|
struct NonCopyable : DEFINE_BASE(NonCopyable) {
|
||||||
using Base = DEFINE_BASE(NonCopyable);
|
using Base = DEFINE_BASE(NonCopyable);
|
||||||
using Base::Base;
|
using Base::Base;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR NonCopyable() DEFINE_NOEXCEPT DEFINE_DEFAULT_CTOR;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR NonCopyable() DEFINE_DEFAULT_CTOR;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR NonCopyable(NonCopyable const &) DEFINE_NOEXCEPT = delete;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR NonCopyable(NonCopyable const &) = delete;
|
||||||
NonCopyable &operator=(NonCopyable const &) DEFINE_NOEXCEPT = delete;
|
NonCopyable &operator=(NonCopyable const &) = delete;
|
||||||
DEFINE_DTOR(NonCopyable)
|
DEFINE_DTOR(NonCopyable)
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MoveOnly : DEFINE_BASE(MoveOnly) {
|
struct MoveOnly : DEFINE_BASE(MoveOnly) {
|
||||||
using Base = DEFINE_BASE(MoveOnly);
|
using Base = DEFINE_BASE(MoveOnly);
|
||||||
using Base::Base;
|
using Base::Base;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR MoveOnly() DEFINE_NOEXCEPT DEFINE_DEFAULT_CTOR;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR MoveOnly() DEFINE_DEFAULT_CTOR;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR MoveOnly(MoveOnly &&) DEFINE_NOEXCEPT DEFINE_CTOR;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR MoveOnly(MoveOnly &&) DEFINE_CTOR;
|
||||||
MoveOnly &operator=(MoveOnly &&) DEFINE_NOEXCEPT DEFINE_ASSIGN;
|
MoveOnly &operator=(MoveOnly &&) DEFINE_ASSIGN;
|
||||||
DEFINE_DTOR(MoveOnly)
|
DEFINE_DTOR(MoveOnly)
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CopyAssignable : DEFINE_BASE(CopyAssignable) {
|
struct CopyAssignable : DEFINE_BASE(CopyAssignable) {
|
||||||
using Base = DEFINE_BASE(CopyAssignable);
|
using Base = DEFINE_BASE(CopyAssignable);
|
||||||
using Base::Base;
|
using Base::Base;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyAssignable() DEFINE_NOEXCEPT = delete;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyAssignable() = delete;
|
||||||
CopyAssignable& operator=(CopyAssignable const&) DEFINE_NOEXCEPT DEFINE_ASSIGN;
|
CopyAssignable& operator=(CopyAssignable const&) DEFINE_ASSIGN;
|
||||||
DEFINE_DTOR(CopyAssignable)
|
DEFINE_DTOR(CopyAssignable)
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CopyAssignOnly : DEFINE_BASE(CopyAssignOnly) {
|
struct CopyAssignOnly : DEFINE_BASE(CopyAssignOnly) {
|
||||||
using Base = DEFINE_BASE(CopyAssignOnly);
|
using Base = DEFINE_BASE(CopyAssignOnly);
|
||||||
using Base::Base;
|
using Base::Base;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyAssignOnly() DEFINE_NOEXCEPT = delete;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR CopyAssignOnly() = delete;
|
||||||
CopyAssignOnly& operator=(CopyAssignOnly const&) DEFINE_NOEXCEPT DEFINE_ASSIGN;
|
CopyAssignOnly& operator=(CopyAssignOnly const&) DEFINE_ASSIGN;
|
||||||
CopyAssignOnly& operator=(CopyAssignOnly &&) DEFINE_NOEXCEPT = delete;
|
CopyAssignOnly& operator=(CopyAssignOnly &&) = delete;
|
||||||
DEFINE_DTOR(CopyAssignOnly)
|
DEFINE_DTOR(CopyAssignOnly)
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MoveAssignOnly : DEFINE_BASE(MoveAssignOnly) {
|
struct MoveAssignOnly : DEFINE_BASE(MoveAssignOnly) {
|
||||||
using Base = DEFINE_BASE(MoveAssignOnly);
|
using Base = DEFINE_BASE(MoveAssignOnly);
|
||||||
using Base::Base;
|
using Base::Base;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR MoveAssignOnly() DEFINE_NOEXCEPT = delete;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR MoveAssignOnly() = delete;
|
||||||
MoveAssignOnly& operator=(MoveAssignOnly const&) DEFINE_NOEXCEPT = delete;
|
MoveAssignOnly& operator=(MoveAssignOnly const&) = delete;
|
||||||
MoveAssignOnly& operator=(MoveAssignOnly &&) DEFINE_NOEXCEPT DEFINE_ASSIGN;
|
MoveAssignOnly& operator=(MoveAssignOnly &&) DEFINE_ASSIGN;
|
||||||
DEFINE_DTOR(MoveAssignOnly)
|
DEFINE_DTOR(MoveAssignOnly)
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ConvertingType : DEFINE_BASE(ConvertingType) {
|
struct ConvertingType : DEFINE_BASE(ConvertingType) {
|
||||||
using Base = DEFINE_BASE(ConvertingType);
|
using Base = DEFINE_BASE(ConvertingType);
|
||||||
using Base::Base;
|
using Base::Base;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR ConvertingType() DEFINE_NOEXCEPT DEFINE_DEFAULT_CTOR;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR ConvertingType() DEFINE_DEFAULT_CTOR;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR ConvertingType(ConvertingType const&) DEFINE_NOEXCEPT DEFINE_CTOR;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR ConvertingType(ConvertingType const&) DEFINE_CTOR;
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR ConvertingType(ConvertingType &&) DEFINE_NOEXCEPT DEFINE_CTOR;
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR ConvertingType(ConvertingType &&) DEFINE_CTOR;
|
||||||
ConvertingType& operator=(ConvertingType const&) DEFINE_NOEXCEPT DEFINE_ASSIGN;
|
ConvertingType& operator=(ConvertingType const&) DEFINE_ASSIGN;
|
||||||
ConvertingType& operator=(ConvertingType &&) DEFINE_NOEXCEPT DEFINE_ASSIGN;
|
ConvertingType& operator=(ConvertingType &&) DEFINE_ASSIGN;
|
||||||
template <class ...Args>
|
template <class ...Args>
|
||||||
DEFINE_EXPLICIT DEFINE_CONSTEXPR ConvertingType(Args&&...) DEFINE_NOEXCEPT {}
|
DEFINE_EXPLICIT DEFINE_CONSTEXPR ConvertingType(Args&&...) {}
|
||||||
template <class Arg>
|
template <class Arg>
|
||||||
ConvertingType& operator=(Arg&&) DEFINE_NOEXCEPT { return *this; }
|
ConvertingType& operator=(Arg&&) { return *this; }
|
||||||
DEFINE_DTOR(ConvertingType)
|
DEFINE_DTOR(ConvertingType)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -168,7 +165,6 @@ using ApplyTypes = List<
|
||||||
|
|
||||||
#undef DEFINE_BASE
|
#undef DEFINE_BASE
|
||||||
#undef DEFINE_EXPLICIT
|
#undef DEFINE_EXPLICIT
|
||||||
#undef DEFINE_NOEXCEPT
|
|
||||||
#undef DEFINE_CONSTEXPR
|
#undef DEFINE_CONSTEXPR
|
||||||
#undef DEFINE_ASSIGN_CONSTEXPR
|
#undef DEFINE_ASSIGN_CONSTEXPR
|
||||||
#undef DEFINE_CTOR
|
#undef DEFINE_CTOR
|
||||||
|
|
Loading…
Reference in New Issue