Skip to content

Commit d6e3f8d

Browse files
committed
!fixup is_same_v -> is_convertible_v, is_constructible_v
1 parent 503b602 commit d6e3f8d

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

llvm/include/llvm/ADT/ArrayRef.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,8 @@ namespace llvm {
152152
/// Construct an ArrayRef<T> from iterator_range<U*>. This uses SFINAE
153153
/// to ensure that this is only used for iterator ranges over plain pointer
154154
/// iterators.
155-
template <typename U, typename = std::enable_if_t<std::is_same_v<U *, T *>>>
155+
template <typename U,
156+
typename = std::enable_if_t<std::is_convertible_v<U *, T *>>>
156157
ArrayRef(const iterator_range<U *> &Range)
157158
: Data(Range.begin()), Length(llvm::size(Range)) {}
158159

llvm/unittests/ADT/ArrayRefTest.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -259,14 +259,13 @@ struct TestRandomAccessIterator {
259259
using iterator_category = std::random_access_iterator_tag;
260260
};
261261

262-
static_assert(
263-
!std::is_constructible<ArrayRef<int>,
264-
iterator_range<TestRandomAccessIterator>>::value,
265-
"cannot construct from iterator range with non-pointer iterator");
266-
static_assert(!std::is_constructible<ArrayRef<int>, iterator_range<int>>::value,
262+
static_assert(!std::is_constructible_v<
263+
ArrayRef<int>, iterator_range<TestRandomAccessIterator>>,
264+
"cannot construct from iterator range with non-pointer iterator");
265+
static_assert(!std::is_constructible_v<ArrayRef<int>, iterator_range<int>>,
267266
"cannot construct from iterator range with non-pointer iterator");
268267
static_assert(
269-
std::is_constructible<ArrayRef<char *>, iterator_range<char **>>::value,
268+
std::is_constructible_v<ArrayRef<char *>, iterator_range<char **>>,
270269
"should be able to construct ArrayRef from iterator_range over pointers");
271270

272271
TEST(ArrayRefTest, ArrayRefFromIteratorRange) {
@@ -276,6 +275,11 @@ TEST(ArrayRefTest, ArrayRefFromIteratorRange) {
276275
EXPECT_EQ(A1.size(), A2.size());
277276
for (std::size_t i = 0; i < A1.size(); ++i)
278277
EXPECT_EQ(A1[i], A2[i]);
278+
279+
ArrayRef<const int> A3 = make_range(A1.begin(), A1.end());
280+
EXPECT_EQ(A1.size(), A3.size());
281+
for (std::size_t i = 0; i < A1.size(); ++i)
282+
EXPECT_EQ(A1[i], A3[i]);
279283
}
280284

281285
TEST(ArrayRefTest, ArrayRefFromIteratorConstRange) {

0 commit comments

Comments
 (0)