mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-25 14:50:26 +00:00
[libcxx] fixes up some [concepts]-related code
* moves `std::copy_constructible` so it comes before `std::equality_comparable_with` * replaces a few uses of `auto`
This commit is contained in:
parent
063b19dea6
commit
6eb5d55c55
@ -243,6 +243,14 @@ template<class _Tp>
|
||||
concept move_constructible =
|
||||
constructible_from<_Tp, _Tp> && convertible_to<_Tp, _Tp>;
|
||||
|
||||
// [concept.copyconstructible]
|
||||
template<class _Tp>
|
||||
concept copy_constructible =
|
||||
move_constructible<_Tp> &&
|
||||
constructible_from<_Tp, _Tp&> && convertible_to<_Tp&, _Tp> &&
|
||||
constructible_from<_Tp, const _Tp&> && convertible_to<const _Tp&, _Tp> &&
|
||||
constructible_from<_Tp, const _Tp> && convertible_to<const _Tp, _Tp>;
|
||||
|
||||
// [concept.booleantestable]
|
||||
template<class _Tp>
|
||||
concept __boolean_testable_impl = convertible_to<_Tp, bool>;
|
||||
@ -275,14 +283,6 @@ concept equality_comparable_with =
|
||||
const remove_reference_t<_Up>&>> &&
|
||||
__weakly_equality_comparable_with<_Tp, _Up>;
|
||||
|
||||
// [concept.copyconstructible]
|
||||
template<class _Tp>
|
||||
concept copy_constructible =
|
||||
move_constructible<_Tp> &&
|
||||
constructible_from<_Tp, _Tp&> && convertible_to<_Tp&, _Tp> &&
|
||||
constructible_from<_Tp, const _Tp&> && convertible_to<const _Tp&, _Tp> &&
|
||||
constructible_from<_Tp, const _Tp> && convertible_to<const _Tp, _Tp>;
|
||||
|
||||
// [concept.invocable]
|
||||
template<class _Fn, class... _Args>
|
||||
concept invocable = requires(_Fn&& __fn, _Args&&... __args) {
|
||||
|
@ -49,7 +49,7 @@ int main(int, char**) {
|
||||
NotInvocable(&A::F);
|
||||
|
||||
{
|
||||
auto X = A{};
|
||||
A X;
|
||||
ModelsInvocable(&A::I, X);
|
||||
ModelsInvocable(&A::F, X);
|
||||
ModelsInvocable(&A::G, X, 0);
|
||||
@ -57,7 +57,7 @@ int main(int, char**) {
|
||||
NotInvocable(&A::G, 0);
|
||||
NotInvocable(&A::H);
|
||||
|
||||
auto const& Y = X;
|
||||
A const& Y = X;
|
||||
ModelsInvocable(&A::I, Y);
|
||||
ModelsInvocable(&A::F, Y);
|
||||
NotInvocable(&A::G, Y, 0);
|
||||
|
@ -48,7 +48,7 @@ int main(int, char**) {
|
||||
NotRegularInvocable(&A::F);
|
||||
|
||||
{
|
||||
auto X = A{};
|
||||
A X;
|
||||
ModelsRegularInvocable(&A::I, X);
|
||||
ModelsRegularInvocable(&A::F, X);
|
||||
ModelsRegularInvocable(&A::G, X, 0);
|
||||
@ -56,7 +56,7 @@ int main(int, char**) {
|
||||
NotRegularInvocable(&A::G, 0);
|
||||
NotRegularInvocable(&A::H);
|
||||
|
||||
auto const& Y = X;
|
||||
A const& Y = X;
|
||||
ModelsRegularInvocable(&A::I, Y);
|
||||
ModelsRegularInvocable(&A::F, Y);
|
||||
NotRegularInvocable(&A::G, Y, 0);
|
||||
|
@ -125,14 +125,14 @@ struct cxx20_friend_eq_operator_with_deleted_ne {
|
||||
struct member_three_way_comparable_with_deleted_eq {
|
||||
auto operator<=>(member_three_way_comparable_with_deleted_eq const&) const =
|
||||
default;
|
||||
auto
|
||||
bool
|
||||
operator==(member_three_way_comparable_with_deleted_eq const&) const = delete;
|
||||
};
|
||||
|
||||
struct member_three_way_comparable_with_deleted_ne {
|
||||
auto operator<=>(member_three_way_comparable_with_deleted_ne const&) const =
|
||||
default;
|
||||
auto
|
||||
bool
|
||||
operator!=(member_three_way_comparable_with_deleted_ne const&) const = delete;
|
||||
};
|
||||
|
||||
@ -140,7 +140,7 @@ struct friend_three_way_comparable_with_deleted_eq {
|
||||
friend auto
|
||||
operator<=>(friend_three_way_comparable_with_deleted_eq const&,
|
||||
friend_three_way_comparable_with_deleted_eq const&) = default;
|
||||
friend auto
|
||||
friend bool
|
||||
operator==(friend_three_way_comparable_with_deleted_eq const&,
|
||||
friend_three_way_comparable_with_deleted_eq const&) = delete;
|
||||
};
|
||||
@ -149,7 +149,7 @@ struct friend_three_way_comparable_with_deleted_ne {
|
||||
friend auto
|
||||
operator<=>(friend_three_way_comparable_with_deleted_ne const&,
|
||||
friend_three_way_comparable_with_deleted_ne const&) = default;
|
||||
friend auto
|
||||
friend bool
|
||||
operator!=(friend_three_way_comparable_with_deleted_ne const&,
|
||||
friend_three_way_comparable_with_deleted_ne const&) = delete;
|
||||
};
|
||||
|
@ -125,7 +125,7 @@ template <typename T1, typename T2>
|
||||
constexpr bool CheckAssignableFromRvalues() {
|
||||
NeverAssignableFrom<T1, T2>();
|
||||
|
||||
constexpr auto Result = std::assignable_from<T1&, T2>;
|
||||
constexpr bool Result = std::assignable_from<T1&, T2>;
|
||||
static_assert(std::assignable_from<T1&, T2&&> == Result);
|
||||
|
||||
return Result;
|
||||
@ -135,7 +135,7 @@ template <typename T1, typename T2>
|
||||
constexpr bool CheckAssignableFromLvalues() {
|
||||
NeverAssignableFrom<T1, T2>();
|
||||
|
||||
constexpr auto Result = std::assignable_from<T1&, const T2&>;
|
||||
constexpr bool Result = std::assignable_from<T1&, const T2&>;
|
||||
static_assert(std::assignable_from<T1&, T2&> == Result);
|
||||
static_assert(std::assignable_from<T1&, const T2&> == Result);
|
||||
|
||||
@ -543,8 +543,8 @@ static_assert(!CheckAssignableFromLvaluesAndRvalues<
|
||||
|
||||
static_assert(CheckAssignableFromLvaluesAndRvalues<std::vector<int>,
|
||||
std::vector<int> >());
|
||||
static_assert(!CheckAssignableFromLvaluesAndRvalues<std::vector<int>,
|
||||
std::vector<const int> >());
|
||||
static_assert(!CheckAssignableFromLvaluesAndRvalues<std::deque<int>,
|
||||
std::deque<const int> >());
|
||||
static_assert(!CheckAssignableFromLvaluesAndRvalues<
|
||||
std::vector<int>, std::vector<int, A1<int> > >());
|
||||
static_assert(!CheckAssignableFromLvaluesAndRvalues<std::vector<int>,
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
template <class T, class U>
|
||||
constexpr bool CheckCommonWith() noexcept {
|
||||
constexpr auto result = std::common_with<T, U>;
|
||||
constexpr bool result = std::common_with<T, U>;
|
||||
static_assert(std::common_with<T, U&> == result);
|
||||
static_assert(std::common_with<T, const U&> == result);
|
||||
static_assert(std::common_with<T, volatile U&> == result);
|
||||
|
Loading…
Reference in New Issue
Block a user