is_readable_iterator.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 94 行
CPP
94 行
// 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 <boost/static_assert.hpp>#include <boost/noncopyable.hpp>#include <boost/type_traits/broken_compiler_spec.hpp>#include <boost/iterator/is_readable_iterator.hpp>#include <boost/iterator.hpp>// Last, for BOOST_NO_LVALUE_RETURN_DETECTION#include <boost/iterator/detail/config_def.hpp>struct v{ v(); ~v();};BOOST_TT_BROKEN_COMPILER_SPEC(v)struct value_iterator : boost::iterator<std::input_iterator_tag,v>{ v operator*() const;};struct noncopyable_iterator : boost::iterator<std::forward_iterator_tag,boost::noncopyable>{ boost::noncopyable const& operator*() const;};struct proxy_iterator : boost::iterator<std::output_iterator_tag,v>{#if BOOST_WORKAROUND(__GNUC__, == 2) typedef boost::iterator<std::input_iterator_tag,v> base; typedef base::iterator_category iterator_category; typedef base::value_type value_type; typedef base::difference_type difference_type; typedef base::pointer pointer; typedef base::reference reference;#endif struct proxy { operator v&(); proxy& operator=(v) const; }; proxy operator*() const;};struct proxy_iterator2 : boost::iterator<std::output_iterator_tag,v>{#if BOOST_WORKAROUND(__GNUC__, == 2) typedef boost::iterator<std::input_iterator_tag,v> base; typedef base::iterator_category iterator_category; typedef base::value_type value_type; typedef base::difference_type difference_type; typedef base::pointer pointer; typedef base::reference reference;#endif struct proxy { proxy& operator=(v) const; }; proxy operator*() const;};BOOST_TT_BROKEN_COMPILER_SPEC(proxy_iterator::proxy)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;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?