/
BirdLeon
/
ROBLOX2016
Обзор
Документация
Войти
/
BirdLeon
/
ROBLOX2016
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
Library/boost/libs/iterator/test/is_readable_iterator.cpp
96 строк
3 KB
PatoFlamejanteTV
full source code
19 дек 2024, 19:11
19 дек 2024, 19:11
05db15d
Код
Авторство
О чём код?
// Copyright David Abrahams 2003. Use, modification and distribution is // subject to the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #include <deque> #include <iterator> #include <iostream> #include <cstddef> // std::ptrdiff_t #include <boost/static_assert.hpp> #include <boost/noncopyable.hpp> #include <boost/iterator/is_readable_iterator.hpp> // Last, for BOOST_NO_LVALUE_RETURN_DETECTION #include <boost/iterator/detail/config_def.hpp> struct v { v(); ~v(); }; struct value_iterator { typedef std::input_iterator_tag iterator_category; typedef v value_type; typedef std::ptrdiff_t difference_type; typedef v* pointer; typedef v& reference; v operator*() const; }; struct noncopyable_iterator { typedef std::forward_iterator_tag iterator_category; typedef boost::noncopyable value_type; typedef std::ptrdiff_t difference_type; typedef boost::noncopyable* pointer; typedef boost::noncopyable& reference; boost::noncopyable const& operator*() const; }; struct proxy_iterator { typedef std::output_iterator_tag iterator_category; typedef v value_type; typedef std::ptrdiff_t difference_type; typedef v* pointer; typedef v& reference; struct proxy { operator v&(); proxy& operator=(v) const; }; proxy operator*() const; }; struct proxy_iterator2 { typedef std::output_iterator_tag iterator_category; typedef v value_type; typedef std::ptrdiff_t difference_type; typedef v* pointer; typedef v& reference; struct proxy { proxy& operator=(v) const; }; proxy operator*() const; }; int main() { BOOST_STATIC_ASSERT(boost::is_readable_iterator<v*>::value); BOOST_STATIC_ASSERT(boost::is_readable_iterator<v const*>::value); BOOST_STATIC_ASSERT(boost::is_readable_iterator<std::deque<v>::iterator>::value); BOOST_STATIC_ASSERT(boost::is_readable_iterator<std::deque<v>::const_iterator>::value); BOOST_STATIC_ASSERT(!boost::is_readable_iterator<std::back_insert_iterator<std::deque<v> > >::value); BOOST_STATIC_ASSERT(!boost::is_readable_iterator<std::ostream_iterator<v> >::value); BOOST_STATIC_ASSERT(boost::is_readable_iterator<proxy_iterator>::value); BOOST_STATIC_ASSERT(!boost::is_readable_iterator<proxy_iterator2>::value); BOOST_STATIC_ASSERT(boost::is_readable_iterator<value_iterator>::value); // Make sure inaccessible copy constructor doesn't prevent // readability BOOST_STATIC_ASSERT(boost::is_readable_iterator<noncopyable_iterator>::value); return 0; }