11b362b15af34006e6a11974088a46d42b903418eJohann//===----------------------------------------------------------------------===// 21b362b15af34006e6a11974088a46d42b903418eJohann// 31b362b15af34006e6a11974088a46d42b903418eJohann// The LLVM Compiler Infrastructure 41b362b15af34006e6a11974088a46d42b903418eJohann// 51b362b15af34006e6a11974088a46d42b903418eJohann// This file is dual licensed under the MIT and the University of Illinois Open 61b362b15af34006e6a11974088a46d42b903418eJohann// Source Licenses. See LICENSE.TXT for details. 71b362b15af34006e6a11974088a46d42b903418eJohann// 81b362b15af34006e6a11974088a46d42b903418eJohann//===----------------------------------------------------------------------===// 91b362b15af34006e6a11974088a46d42b903418eJohann 101b362b15af34006e6a11974088a46d42b903418eJohann// <iterator> 111b362b15af34006e6a11974088a46d42b903418eJohann 121b362b15af34006e6a11974088a46d42b903418eJohann// move_iterator 131b362b15af34006e6a11974088a46d42b903418eJohann 141b362b15af34006e6a11974088a46d42b903418eJohann// template <class U> 151b362b15af34006e6a11974088a46d42b903418eJohann// requires HasAssign<Iter, const U&> 161b362b15af34006e6a11974088a46d42b903418eJohann// move_iterator& 171b362b15af34006e6a11974088a46d42b903418eJohann// operator=(const move_iterator<U>& u); 181b362b15af34006e6a11974088a46d42b903418eJohann 191b362b15af34006e6a11974088a46d42b903418eJohann#include <iterator> 201b362b15af34006e6a11974088a46d42b903418eJohann#include <cassert> 211b362b15af34006e6a11974088a46d42b903418eJohann 221b362b15af34006e6a11974088a46d42b903418eJohann#include "test_iterators.h" 231b362b15af34006e6a11974088a46d42b903418eJohann 241b362b15af34006e6a11974088a46d42b903418eJohanntemplate <class It, class U> 251b362b15af34006e6a11974088a46d42b903418eJohannvoid 261b362b15af34006e6a11974088a46d42b903418eJohanntest(U u) 271b362b15af34006e6a11974088a46d42b903418eJohann{ 281b362b15af34006e6a11974088a46d42b903418eJohann const std::move_iterator<U> r2(u); 291b362b15af34006e6a11974088a46d42b903418eJohann std::move_iterator<It> r1; 301b362b15af34006e6a11974088a46d42b903418eJohann std::move_iterator<It>& rr = r1 = r2; 311b362b15af34006e6a11974088a46d42b903418eJohann assert(r1.base() == u); 321b362b15af34006e6a11974088a46d42b903418eJohann assert(&rr == &r1); 331b362b15af34006e6a11974088a46d42b903418eJohann} 341b362b15af34006e6a11974088a46d42b903418eJohann 351b362b15af34006e6a11974088a46d42b903418eJohannstruct Base {}; 361b362b15af34006e6a11974088a46d42b903418eJohannstruct Derived : Base {}; 371b362b15af34006e6a11974088a46d42b903418eJohann 381b362b15af34006e6a11974088a46d42b903418eJohannint main() 391b362b15af34006e6a11974088a46d42b903418eJohann{ 401b362b15af34006e6a11974088a46d42b903418eJohann Derived d; 411b362b15af34006e6a11974088a46d42b903418eJohann 421b362b15af34006e6a11974088a46d42b903418eJohann test<input_iterator<Base*> >(input_iterator<Derived*>(&d)); 431b362b15af34006e6a11974088a46d42b903418eJohann test<forward_iterator<Base*> >(forward_iterator<Derived*>(&d)); 441b362b15af34006e6a11974088a46d42b903418eJohann test<bidirectional_iterator<Base*> >(bidirectional_iterator<Derived*>(&d)); 451b362b15af34006e6a11974088a46d42b903418eJohann test<random_access_iterator<const Base*> >(random_access_iterator<Derived*>(&d)); 461b362b15af34006e6a11974088a46d42b903418eJohann test<Base*>(&d); 471b362b15af34006e6a11974088a46d42b903418eJohann} 481b362b15af34006e6a11974088a46d42b903418eJohann