//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // // __bounded_iter<_Iter> // __static_bounded_iter<_Iter> // __wrap_iter<_Iter> // Verify that libc++-wrapped iterators do not permit slicing conversion or construction. // XFAIL: FROZEN-CXX03-HEADERS-FIXME #include #include #include #include #include "test_macros.h" struct Base {}; struct Derived : Base {}; template ::iterator>::value> struct test_array_helper : std::true_type { typedef typename std::array::iterator BaseIter; typedef typename std::array::iterator DerivedIter; typedef typename std::array::const_iterator BaseConstIter; typedef typename std::array::const_iterator DerivedConstIter; static_assert(!std::is_convertible::value, ""); static_assert(!std::is_convertible::value, ""); static_assert(!std::is_convertible::value, ""); static_assert(!std::is_constructible::value, ""); static_assert(!std::is_constructible::value, ""); static_assert(!std::is_constructible::value, ""); }; template struct test_array_helper : std::true_type {}; static_assert(test_array_helper::value, ""); static_assert(!std::is_convertible::iterator, std::vector::iterator>::value, ""); static_assert(!std::is_convertible::iterator, std::vector::const_iterator>::value, ""); static_assert(!std::is_convertible::const_iterator, std::vector::const_iterator>::value, ""); static_assert(!std::is_constructible::iterator, std::vector::iterator>::value, ""); static_assert(!std::is_constructible::const_iterator, std::vector::iterator>::value, ""); static_assert(!std::is_constructible::const_iterator, std::vector::const_iterator>::value, ""); #if TEST_STD_VER >= 20 static_assert(!std::is_convertible_v::iterator, std::span::iterator>); static_assert(!std::is_convertible_v::iterator, std::span::iterator>); static_assert(!std::is_convertible_v::iterator, std::span::iterator>); static_assert(!std::is_constructible_v::iterator, std::span::iterator>); static_assert(!std::is_constructible_v::iterator, std::span::iterator>); static_assert(!std::is_constructible_v::iterator, std::span::iterator>); #endif