Skip to content

Commit 2c717ea

Browse files
committed
Updated tests
1 parent afc11c6 commit 2c717ea

File tree

3 files changed

+59
-96
lines changed

3 files changed

+59
-96
lines changed

libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/common.h

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,43 @@ class Abstract
4444
virtual ~Abstract() = 0;
4545
};
4646

47+
// Types for reference_{constructs/converts}_from_temporary
48+
49+
struct NonPOD {
50+
NonPOD(int);
51+
};
52+
enum Enum { EV };
53+
struct POD {
54+
Enum e;
55+
int i;
56+
float f;
57+
NonPOD* p;
58+
};
59+
// Not PODs
60+
struct Derives : POD {};
61+
62+
template <class T, class RefType = T&>
63+
class ConvertsToRef {
64+
public:
65+
operator RefType() const { return static_cast<RefType>(obj); }
66+
mutable T obj = 42;
67+
};
68+
template <class T, class RefType = T&>
69+
class ConvertsToRefPrivate {
70+
operator RefType() const { return static_cast<RefType>(obj); }
71+
mutable T obj = 42;
72+
};
73+
74+
class ExplicitConversionRvalueRef {
75+
public:
76+
operator int();
77+
explicit operator int&&();
78+
};
79+
80+
class ExplicitConversionRef {
81+
public:
82+
operator int();
83+
explicit operator int&();
84+
};
85+
4786
#endif // TEST_META_UNARY_COMP_COMMON_H

libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/reference_constructs_from_temporary.pass.cpp

Lines changed: 10 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -22,42 +22,9 @@
2222
#include <cassert>
2323
#include <type_traits>
2424

25+
#include "common.h"
2526
#include "test_macros.h"
2627

27-
struct NonPOD {
28-
NonPOD(int);
29-
};
30-
enum Enum { EV };
31-
struct POD {
32-
Enum e;
33-
int i;
34-
float f;
35-
NonPOD* p;
36-
};
37-
// Not PODs
38-
struct Derives : POD {};
39-
40-
template <class T, class RefType = T&>
41-
struct ConvertsToRef {
42-
operator RefType() const { return static_cast<RefType>(obj); }
43-
mutable T obj = 42;
44-
};
45-
template <class T, class RefType = T&>
46-
class ConvertsToRefPrivate {
47-
operator RefType() const { return static_cast<RefType>(obj); }
48-
mutable T obj = 42;
49-
};
50-
51-
struct ExplicitConversionRvalueRef {
52-
operator int();
53-
explicit operator int&&();
54-
};
55-
56-
struct ExplicitConversionRef {
57-
operator int();
58-
explicit operator int&();
59-
};
60-
6128
template <typename T, typename U, bool Expected>
6229
constexpr void test_reference_constructs_from_temporary() {
6330
assert((std::reference_constructs_from_temporary<T, U>::value == Expected));
@@ -79,22 +46,17 @@ constexpr bool test() {
7946
test_reference_constructs_from_temporary<const int&, long&&, true>();
8047
test_reference_constructs_from_temporary<int&&, long&, true>();
8148

82-
using LRef = ConvertsToRef<int, int&>;
83-
using RRef = ConvertsToRef<int, int&&>;
84-
using CLRef = ConvertsToRef<int, const int&>;
85-
using LongRef = ConvertsToRef<long, long&>;
86-
87-
assert((std::is_constructible_v<int&, LRef>));
88-
test_reference_constructs_from_temporary<int&, LRef, false>();
49+
assert((std::is_constructible_v<int&, ConvertsToRef<int, int&>>));
50+
test_reference_constructs_from_temporary<int&, ConvertsToRef<int, int&>, false>();
8951

90-
assert((std::is_constructible_v<int&&, RRef>));
91-
test_reference_constructs_from_temporary<int&&, RRef, false>();
52+
assert((std::is_constructible_v<int&&, ConvertsToRef<int, int&&>>));
53+
test_reference_constructs_from_temporary<int&&, ConvertsToRef<int, int&&>, false>();
9254

93-
assert((std::is_constructible_v<const int&, CLRef>));
94-
test_reference_constructs_from_temporary<int&&, CLRef, false>();
55+
assert((std::is_constructible_v<const int&, ConvertsToRef<int, const int&>>));
56+
test_reference_constructs_from_temporary<int&&, ConvertsToRef<int, const int&>, false>();
9557

96-
assert((std::is_constructible_v<const int&, LongRef>));
97-
test_reference_constructs_from_temporary<const int&, LongRef, true>();
58+
assert((std::is_constructible_v<const int&, ConvertsToRef<long, long&>>));
59+
test_reference_constructs_from_temporary<const int&, ConvertsToRef<long, long&>, true>();
9860
#ifndef TEST_COMPILER_GCC
9961
test_reference_constructs_from_temporary<const int&, ConvertsToRefPrivate<long, long&>, false>();
10062
#endif
@@ -105,7 +67,7 @@ constexpr bool test() {
10567
test_reference_constructs_from_temporary<const int&, long, true>();
10668

10769
// Additional checks
108-
test_reference_constructs_from_temporary<POD const&, Derives, true>();
70+
test_reference_constructs_from_temporary<const POD&, Derives, true>();
10971
test_reference_constructs_from_temporary<int&&, int, true>();
11072
test_reference_constructs_from_temporary<const int&, int, true>();
11173
test_reference_constructs_from_temporary<int&&, int&&, false>();

libcxx/test/std/utilities/meta/meta.unary/meta.unary.prop/reference_converts_from_temporary.pass.cpp

Lines changed: 10 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -22,42 +22,9 @@
2222
#include <cassert>
2323
#include <type_traits>
2424

25+
#include "common.h"
2526
#include "test_macros.h"
2627

27-
struct NonPOD {
28-
NonPOD(int);
29-
};
30-
enum Enum { EV };
31-
struct POD {
32-
Enum e;
33-
int i;
34-
float f;
35-
NonPOD* p;
36-
};
37-
// Not PODs
38-
struct Derives : POD {};
39-
40-
template <class T, class RefType = T&>
41-
struct ConvertsToRef {
42-
operator RefType() const { return static_cast<RefType>(obj); }
43-
mutable T obj = 42;
44-
};
45-
template <class T, class RefType = T&>
46-
class ConvertsToRefPrivate {
47-
operator RefType() const { return static_cast<RefType>(obj); }
48-
mutable T obj = 42;
49-
};
50-
51-
struct ExplicitConversionRvalueRef {
52-
operator int();
53-
explicit operator int&&();
54-
};
55-
56-
struct ExplicitConversionRef {
57-
operator int();
58-
explicit operator int&();
59-
};
60-
6128
template <typename T, typename U, bool Expected>
6229
constexpr void test_reference_converts_from_temporary() {
6330
assert((std::reference_converts_from_temporary<T, U>::value == Expected));
@@ -79,22 +46,17 @@ constexpr bool test() {
7946
test_reference_converts_from_temporary<const int&, long&&, true>();
8047
test_reference_converts_from_temporary<int&&, long&, true>();
8148

82-
using LRef = ConvertsToRef<int, int&>;
83-
using RRef = ConvertsToRef<int, int&&>;
84-
using CLRef = ConvertsToRef<int, const int&>;
85-
using LongRef = ConvertsToRef<long, long&>;
86-
87-
assert((std::is_constructible_v<int&, LRef>));
88-
test_reference_converts_from_temporary<int&, LRef, false>();
49+
assert((std::is_constructible_v<int&, ConvertsToRef<int, int&>>));
50+
test_reference_converts_from_temporary<int&, ConvertsToRef<int, int&>, false>();
8951

90-
assert((std::is_constructible_v<int&&, RRef>));
91-
test_reference_converts_from_temporary<int&&, RRef, false>();
52+
assert((std::is_constructible_v<int&&, ConvertsToRef<int, int&&>>));
53+
test_reference_converts_from_temporary<int&&, ConvertsToRef<int, int&&>, false>();
9254

93-
assert((std::is_constructible_v<const int&, CLRef>));
94-
test_reference_converts_from_temporary<int&&, CLRef, false>();
55+
assert((std::is_constructible_v<const int&, ConvertsToRef<int, const int&>>));
56+
test_reference_converts_from_temporary<int&&, ConvertsToRef<int, const int&>, false>();
9557

96-
assert((std::is_constructible_v<const int&, LongRef>));
97-
test_reference_converts_from_temporary<const int&, LongRef, true>();
58+
assert((std::is_constructible_v<const int&, ConvertsToRef<long, long&>>));
59+
test_reference_converts_from_temporary<const int&, ConvertsToRef<long, long&>, true>();
9860
#ifndef TEST_COMPILER_GCC
9961
test_reference_converts_from_temporary<const int&, ConvertsToRefPrivate<long, long&>, false>();
10062
#endif
@@ -105,7 +67,7 @@ constexpr bool test() {
10567
test_reference_converts_from_temporary<const int&, long, true>();
10668

10769
// Additional checks
108-
test_reference_converts_from_temporary<POD const&, Derives, true>();
70+
test_reference_converts_from_temporary<const POD&, Derives, true>();
10971
test_reference_converts_from_temporary<int&&, int, true>();
11072
test_reference_converts_from_temporary<const int&, int, true>();
11173
test_reference_converts_from_temporary<int&&, int&&, false>();

0 commit comments

Comments
 (0)