123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- // (C) Copyright Jeremy Siek 2000.
- // 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)
- #include <boost/concept_check.hpp>
- #include <boost/concept_archetype.hpp>
- /*
- This file verifies that function_requires() of the Boost Concept
- Checking Library does not cause errors when it is not suppose to
- and verifies that the concept archetypes meet the requirements of
- their matching concepts.
- */
- int
- main()
- {
- using namespace boost;
- //===========================================================================
- // Basic Concepts
- {
- typedef default_constructible_archetype<> foo;
- function_requires< DefaultConstructible<foo> >();
- }
- {
- typedef assignable_archetype<> foo;
- function_requires< Assignable<foo> >();
- }
- {
- typedef copy_constructible_archetype<> foo;
- function_requires< CopyConstructible<foo> >();
- }
- {
- typedef sgi_assignable_archetype<> foo;
- function_requires< SGIAssignable<foo> >();
- }
- {
- typedef copy_constructible_archetype<> foo;
- typedef convertible_to_archetype<foo> convertible_to_foo;
- function_requires< Convertible<convertible_to_foo, foo> >();
- }
- {
- function_requires< Convertible<boolean_archetype, bool> >();
- }
- {
- typedef equality_comparable_archetype<> foo;
- function_requires< EqualityComparable<foo> >();
- }
- {
- typedef less_than_comparable_archetype<> foo;
- function_requires< LessThanComparable<foo> >();
- }
- {
- typedef comparable_archetype<> foo;
- function_requires< Comparable<foo> >();
- }
- {
- typedef equal_op_first_archetype<> First;
- typedef equal_op_second_archetype<> Second;
- function_requires< EqualOp<First, Second> >();
- }
- {
- typedef not_equal_op_first_archetype<> First;
- typedef not_equal_op_second_archetype<> Second;
- function_requires< NotEqualOp<First, Second> >();
- }
- {
- typedef less_than_op_first_archetype<> First;
- typedef less_than_op_second_archetype<> Second;
- function_requires< LessThanOp<First, Second> >();
- }
- {
- typedef less_equal_op_first_archetype<> First;
- typedef less_equal_op_second_archetype<> Second;
- function_requires< LessEqualOp<First, Second> >();
- }
- {
- typedef greater_than_op_first_archetype<> First;
- typedef greater_than_op_second_archetype<> Second;
- function_requires< GreaterThanOp<First, Second> >();
- }
- {
- typedef greater_equal_op_first_archetype<> First;
- typedef greater_equal_op_second_archetype<> Second;
- function_requires< GreaterEqualOp<First, Second> >();
- }
- {
- typedef copy_constructible_archetype<> Return;
- typedef plus_op_first_archetype<Return> First;
- typedef plus_op_second_archetype<Return> Second;
- function_requires< PlusOp<Return, First, Second> >();
- }
- //===========================================================================
- // Function Object Concepts
- {
- typedef generator_archetype<null_archetype<> > foo;
- function_requires< Generator<foo, null_archetype<> > >();
- }
- #if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- {
- function_requires< Generator< void_generator_archetype, void > >();
- }
- #endif
- {
- typedef unary_function_archetype<int, int> F;
- function_requires< UnaryFunction<F, int, int> >();
- }
- {
- typedef binary_function_archetype<int, int, int> F;
- function_requires< BinaryFunction<F, int, int, int> >();
- }
- {
- typedef unary_predicate_archetype<int> F;
- function_requires< UnaryPredicate<F, int> >();
- }
- {
- typedef binary_predicate_archetype<int, int> F;
- function_requires< BinaryPredicate<F, int, int> >();
- }
- //===========================================================================
- // Iterator Concepts
- {
- typedef input_iterator_archetype<null_archetype<> > Iter;
- function_requires< InputIterator<Iter> >();
- }
- {
- typedef output_iterator_archetype<int> Iter;
- function_requires< OutputIterator<Iter, int> >();
- }
- {
- typedef input_output_iterator_archetype<int> Iter;
- function_requires< InputIterator<Iter> >();
- function_requires< OutputIterator<Iter, int> >();
- }
- {
- typedef forward_iterator_archetype<null_archetype<> > Iter;
- function_requires< ForwardIterator<Iter> >();
- }
- {
- typedef mutable_forward_iterator_archetype<assignable_archetype<> > Iter;
- function_requires< Mutable_ForwardIterator<Iter> >();
- }
- {
- typedef bidirectional_iterator_archetype<null_archetype<> > Iter;
- function_requires< BidirectionalIterator<Iter> >();
- }
- {
- typedef mutable_bidirectional_iterator_archetype<assignable_archetype<> >
- Iter;
- function_requires< Mutable_BidirectionalIterator<Iter> >();
- }
- {
- typedef random_access_iterator_archetype<null_archetype<> > Iter;
- function_requires< RandomAccessIterator<Iter> >();
- }
- {
- typedef mutable_random_access_iterator_archetype<assignable_archetype<> >
- Iter;
- function_requires< Mutable_RandomAccessIterator<Iter> >();
- }
- //===========================================================================
- // Container Concepts
- // UNDER CONSTRUCTION
- return 0;
- }
|