⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 boost_concept_check.h

📁 openRisc2000编译链接器等,用于i386 cygwin
💻 H
📖 第 1 页 / 共 3 页
字号:
  //===========================================================================  // Function Object Concepts  template <class _Func, class _Return>  struct _GeneratorConcept  {    void __constraints() {      const _Return& __r _IsUnused = __f();// require operator() member function    }    _Func __f;  };  template <class _Func>  struct _GeneratorConcept<_Func,void>  {    void __constraints() {      __f();                            // require operator() member function    }    _Func __f;  };  template <class _Func, class _Return, class _Arg>  struct _UnaryFunctionConcept  {    void __constraints() {      __r = __f(__arg);                  // require operator()    }    _Func __f;    _Arg __arg;    _Return __r;  };  template <class _Func, class _Arg>  struct _UnaryFunctionConcept<_Func, void, _Arg> {    void __constraints() {      __f(__arg);                       // require operator()    }    _Func __f;    _Arg __arg;  };  template <class _Func, class _Return, class _First, class _Second>  struct _BinaryFunctionConcept  {    void __constraints() {      __r = __f(__first, __second);     // require operator()    }    _Func __f;    _First __first;    _Second __second;    _Return __r;  };  template <class _Func, class _First, class _Second>  struct _BinaryFunctionConcept<_Func, void, _First, _Second>  {    void __constraints() {      __f(__first, __second);           // require operator()    }    _Func __f;    _First __first;    _Second __second;  };  template <class _Func, class _Arg>  struct _UnaryPredicateConcept  {    void __constraints() {      __aux_require_boolean_expr(__f(__arg)); // require op() returning bool    }    _Func __f;    _Arg __arg;  };  template <class _Func, class _First, class _Second>  struct _BinaryPredicateConcept  {    void __constraints() {      __aux_require_boolean_expr(__f(__a, __b)); // require op() returning bool    }    _Func __f;    _First __a;    _Second __b;  };  // use this when functor is used inside a container class like std::set  template <class _Func, class _First, class _Second>  struct _Const_BinaryPredicateConcept {    void __constraints() {      __const_constraints(__f);    }    void __const_constraints(const _Func& __fun) {      __function_requires<_BinaryPredicateConcept<_Func, _First, _Second> >();      // operator() must be a const member function      __aux_require_boolean_expr(__fun(__a, __b));    }    _Func __f;    _First __a;    _Second __b;  };  //===========================================================================  // Iterator Concepts  template <class _Tp>  struct _TrivialIteratorConcept  {    void __constraints() {//    __function_requires< _DefaultConstructibleConcept<_Tp> >();      __function_requires< _AssignableConcept<_Tp> >();      __function_requires< _EqualityComparableConcept<_Tp> >();//      typedef typename std::iterator_traits<_Tp>::value_type _V;      (void)*__i;                       // require dereference operator    }    _Tp __i;  };  template <class _Tp>  struct _Mutable_TrivialIteratorConcept  {    void __constraints() {      __function_requires< _TrivialIteratorConcept<_Tp> >();      *__i = *__j;                      // require dereference and assignment    }    _Tp __i, __j;  };  template <class _Tp>  struct _InputIteratorConcept  {    void __constraints() {      __function_requires< _TrivialIteratorConcept<_Tp> >();      // require iterator_traits typedef's      typedef typename std::iterator_traits<_Tp>::difference_type _Diff;//      __function_requires< _SignedIntegerConcept<_Diff> >();      typedef typename std::iterator_traits<_Tp>::reference _Ref;      typedef typename std::iterator_traits<_Tp>::pointer _Pt;      typedef typename std::iterator_traits<_Tp>::iterator_category _Cat;      __function_requires< _ConvertibleConcept<        typename std::iterator_traits<_Tp>::iterator_category,        std::input_iterator_tag> >();      ++__i;                            // require preincrement operator      __i++;                            // require postincrement operator    }    _Tp __i;  };  template <class _Tp, class _ValueT>  struct _OutputIteratorConcept  {    void __constraints() {      __function_requires< _AssignableConcept<_Tp> >();      ++__i;                            // require preincrement operator      __i++;                            // require postincrement operator      *__i++ = __t;                     // require postincrement and assignment    }    _Tp __i;    _ValueT __t;  };  template <class _Tp>  struct _ForwardIteratorConcept  {    void __constraints() {      __function_requires< _InputIteratorConcept<_Tp> >();      __function_requires< _DefaultConstructibleConcept<_Tp> >();      __function_requires< _ConvertibleConcept<        typename std::iterator_traits<_Tp>::iterator_category,        std::forward_iterator_tag> >();      typedef typename std::iterator_traits<_Tp>::reference _Ref;      _Ref __r _IsUnused = *__i;    }    _Tp __i;  };  template <class _Tp>  struct _Mutable_ForwardIteratorConcept  {    void __constraints() {      __function_requires< _ForwardIteratorConcept<_Tp> >();      *__i++ = *__i;                    // require postincrement and assignment    }    _Tp __i;  };  template <class _Tp>  struct _BidirectionalIteratorConcept  {    void __constraints() {      __function_requires< _ForwardIteratorConcept<_Tp> >();      __function_requires< _ConvertibleConcept<        typename std::iterator_traits<_Tp>::iterator_category,        std::bidirectional_iterator_tag> >();      --__i;                            // require predecrement operator      __i--;                            // require postdecrement operator    }    _Tp __i;  };  template <class _Tp>  struct _Mutable_BidirectionalIteratorConcept  {    void __constraints() {      __function_requires< _BidirectionalIteratorConcept<_Tp> >();      __function_requires< _Mutable_ForwardIteratorConcept<_Tp> >();      *__i-- = *__i;                    // require postdecrement and assignment    }    _Tp __i;  };  template <class _Tp>  struct _RandomAccessIteratorConcept  {    void __constraints() {      __function_requires< _BidirectionalIteratorConcept<_Tp> >();      __function_requires< _ComparableConcept<_Tp> >();      __function_requires< _ConvertibleConcept<        typename std::iterator_traits<_Tp>::iterator_category,        std::random_access_iterator_tag> >();      // ??? We don't use _Ref, are we just checking for "referenceability"?      typedef typename std::iterator_traits<_Tp>::reference _Ref;      __i += __n;                       // require assignment addition operator      __i = __i + __n; __i = __n + __i; // require addition with difference type      __i -= __n;                       // require assignment subtraction op      __i = __i - __n;                  // require subtraction with                                        //            difference type      __n = __i - __j;                  // require difference operator      (void)__i[__n];                   // require element access operator    }    _Tp __a, __b;    _Tp __i, __j;    typename std::iterator_traits<_Tp>::difference_type __n;  };  template <class _Tp>  struct _Mutable_RandomAccessIteratorConcept  {    void __constraints() {      __function_requires< _RandomAccessIteratorConcept<_Tp> >();      __function_requires< _Mutable_BidirectionalIteratorConcept<_Tp> >();      __i[__n] = *__i;                  // require element access and assignment    }    _Tp __i;    typename std::iterator_traits<_Tp>::difference_type __n;  };  //===========================================================================  // Container Concepts  template <class _Container>  struct _ContainerConcept  {    typedef typename _Container::value_type _Value_type;    typedef typename _Container::difference_type _Difference_type;    typedef typename _Container::size_type _Size_type;    typedef typename _Container::const_reference _Const_reference;    typedef typename _Container::const_pointer _Const_pointer;    typedef typename _Container::const_iterator _Const_iterator;    void __constraints() {      __function_requires< _InputIteratorConcept<_Const_iterator> >();      __function_requires< _AssignableConcept<_Container> >();      const _Container __c;      __i = __c.begin();      __i = __c.end();      __n = __c.size();      __n = __c.max_size();      __b = __c.empty();    }    bool __b;    _Const_iterator __i;    _Size_type __n;  };  template <class _Container>  struct _Mutable_ContainerConcept  {    typedef typename _Container::value_type _Value_type;    typedef typename _Container::reference _Reference;    typedef typename _Container::iterator _Iterator;    typedef typename _Container::pointer _Pointer;    void __constraints() {      __function_requires< _ContainerConcept<_Container> >();      __function_requires< _AssignableConcept<_Value_type> >();      __function_requires< _InputIteratorConcept<_Iterator> >();      __i = __c.begin();      __i = __c.end();      __c.swap(__c2);    }    _Iterator __i;    _Container __c, __c2;  };  template <class _ForwardContainer>  struct _ForwardContainerConcept  {    void __constraints() {      __function_requires< _ContainerConcept<_ForwardContainer> >();      typedef typename _ForwardContainer::const_iterator _Const_iterator;      __function_requires< _ForwardIteratorConcept<_Const_iterator> >();    }  };  template <class _ForwardContainer>  struct _Mutable_ForwardContainerConcept  {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -