//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // // __libcpp_is_trivial_iterator // __libcpp_string_gets_noexcept_iterator determines if an iterator can be used // w/o worrying about whether or not certain operations can throw. // This gives us a "fast path for string operations" // #include #include #include #include #include #include "test_iterators.h" int main() { // basic tests static_assert(( std::__libcpp_string_gets_noexcept_iterator::value), ""); static_assert(( std::__libcpp_string_gets_noexcept_iterator::value), ""); static_assert(( std::__libcpp_string_gets_noexcept_iterator > ::value), ""); static_assert(( std::__libcpp_string_gets_noexcept_iterator >::value), ""); static_assert(( std::__libcpp_string_gets_noexcept_iterator > ::value), ""); static_assert(( std::__libcpp_string_gets_noexcept_iterator >::value), ""); static_assert(( std::__libcpp_string_gets_noexcept_iterator > ::value), ""); static_assert(( std::__libcpp_string_gets_noexcept_iterator >::value), ""); static_assert(( std::__libcpp_string_gets_noexcept_iterator > > ::value), ""); // iterators in the libc++ test suite static_assert((!std::__libcpp_string_gets_noexcept_iterator >::value), ""); static_assert((!std::__libcpp_string_gets_noexcept_iterator >::value), ""); static_assert((!std::__libcpp_string_gets_noexcept_iterator >::value), ""); static_assert((!std::__libcpp_string_gets_noexcept_iterator >::value), ""); static_assert((!std::__libcpp_string_gets_noexcept_iterator >::value), ""); static_assert((!std::__libcpp_string_gets_noexcept_iterator >::value), ""); #if __has_feature(cxx_noexcept) static_assert(( std::__libcpp_string_gets_noexcept_iterator >::value), ""); #else static_assert((!std::__libcpp_string_gets_noexcept_iterator >::value), ""); #endif // // iterators from libc++'s containers // // string static_assert(( std::__libcpp_string_gets_noexcept_iterator::iterator> ::value), ""); static_assert(( std::__libcpp_string_gets_noexcept_iterator::const_iterator> ::value), ""); static_assert(( std::__libcpp_string_gets_noexcept_iterator::reverse_iterator> ::value), ""); static_assert(( std::__libcpp_string_gets_noexcept_iterator::const_reverse_iterator>::value), ""); // vector static_assert(( std::__libcpp_string_gets_noexcept_iterator::iterator> ::value), ""); static_assert(( std::__libcpp_string_gets_noexcept_iterator::const_iterator> ::value), ""); static_assert(( std::__libcpp_string_gets_noexcept_iterator::reverse_iterator> ::value), ""); static_assert(( std::__libcpp_string_gets_noexcept_iterator::const_reverse_iterator>::value), ""); #ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS // Initializer list (which has no reverse iterators) static_assert(( std::__libcpp_string_gets_noexcept_iterator::iterator> ::value), ""); static_assert(( std::__libcpp_string_gets_noexcept_iterator::const_iterator> ::value), ""); #endif }