12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- // Copyright Jeremy Siek, David Abrahams 2000-2006. Distributed under
- // 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)
- #ifndef BOOST_LIBS_CONCEPT_CHECK_OLD_CONCEPTS_DWA2006428_HPP
- # define BOOST_LIBS_CONCEPT_CHECK_OLD_CONCEPTS_DWA2006428_HPP
- #include <boost/concept_check.hpp>
- namespace old
- {
- template <class TT>
- void require_boolean_expr(const TT& t) {
- bool x = t;
- boost::ignore_unused_variable_warning(x);
- }
-
- template <class TT>
- struct EqualityComparableConcept
- {
- void constraints() {
- boost::require_boolean_expr(a == b);
- boost::require_boolean_expr(a != b);
- }
- TT a, b;
- };
- template <class Func, class Return, class Arg>
- struct UnaryFunctionConcept
- {
- // required in case any of our template args are const-qualified:
- UnaryFunctionConcept();
-
- void constraints() {
- r = f(arg); // require operator()
- }
- Func f;
- Arg arg;
- Return r;
- };
- 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;
- };
- #define DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(OP,NAME) \
- template <class First, class Second> \
- struct NAME { \
- void constraints() { (void)constraints_(); } \
- bool constraints_() { \
- return a OP b; \
- } \
- First a; \
- Second b; \
- }
- DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(==, EqualOpConcept);
- }
- #endif // BOOST_LIBS_CONCEPT_CHECK_OLD_CONCEPTS_DWA2006428_HPP
|