forked from OSchip/llvm-project
[ADT] Change iterator_adaptor_base's default template arguments to forward more underlying typedefs
Reviewers: chandlerc Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D23217 llvm-svn: 278157
This commit is contained in:
parent
0c74967186
commit
75c1656afb
|
@ -155,7 +155,14 @@ template <
|
||||||
typename T = typename std::iterator_traits<WrappedIteratorT>::value_type,
|
typename T = typename std::iterator_traits<WrappedIteratorT>::value_type,
|
||||||
typename DifferenceTypeT =
|
typename DifferenceTypeT =
|
||||||
typename std::iterator_traits<WrappedIteratorT>::difference_type,
|
typename std::iterator_traits<WrappedIteratorT>::difference_type,
|
||||||
typename PointerT = T *, typename ReferenceT = T &,
|
typename PointerT = typename std::conditional<
|
||||||
|
std::is_same<T, typename std::iterator_traits<
|
||||||
|
WrappedIteratorT>::value_type>::value,
|
||||||
|
typename std::iterator_traits<WrappedIteratorT>::pointer, T *>::type,
|
||||||
|
typename ReferenceT = typename std::conditional<
|
||||||
|
std::is_same<T, typename std::iterator_traits<
|
||||||
|
WrappedIteratorT>::value_type>::value,
|
||||||
|
typename std::iterator_traits<WrappedIteratorT>::reference, T &>::type,
|
||||||
// Don't provide these, they are mostly to act as aliases below.
|
// Don't provide these, they are mostly to act as aliases below.
|
||||||
typename WrappedTraitsT = std::iterator_traits<WrappedIteratorT>>
|
typename WrappedTraitsT = std::iterator_traits<WrappedIteratorT>>
|
||||||
class iterator_adaptor_base
|
class iterator_adaptor_base
|
||||||
|
|
|
@ -16,6 +16,24 @@ using namespace llvm;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
template <int> struct Shadow;
|
||||||
|
|
||||||
|
struct WeirdIter : std::iterator<std::input_iterator_tag, Shadow<0>, Shadow<1>,
|
||||||
|
Shadow<2>, Shadow<3>> {};
|
||||||
|
|
||||||
|
struct AdaptedIter : iterator_adaptor_base<AdaptedIter, WeirdIter> {};
|
||||||
|
|
||||||
|
// Test that iterator_adaptor_base forwards typedefs, if value_type is
|
||||||
|
// unchanged.
|
||||||
|
static_assert(std::is_same<typename AdaptedIter::value_type, Shadow<0>>::value,
|
||||||
|
"");
|
||||||
|
static_assert(
|
||||||
|
std::is_same<typename AdaptedIter::difference_type, Shadow<1>>::value, "");
|
||||||
|
static_assert(std::is_same<typename AdaptedIter::pointer, Shadow<2>>::value,
|
||||||
|
"");
|
||||||
|
static_assert(std::is_same<typename AdaptedIter::reference, Shadow<3>>::value,
|
||||||
|
"");
|
||||||
|
|
||||||
TEST(PointeeIteratorTest, Basic) {
|
TEST(PointeeIteratorTest, Basic) {
|
||||||
int arr[4] = { 1, 2, 3, 4 };
|
int arr[4] = { 1, 2, 3, 4 };
|
||||||
SmallVector<int *, 4> V;
|
SmallVector<int *, 4> V;
|
||||||
|
|
Loading…
Reference in New Issue