// (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 #include /* 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 >(); } { typedef assignable_archetype<> foo; function_requires< Assignable >(); } { typedef copy_constructible_archetype<> foo; function_requires< CopyConstructible >(); } { typedef sgi_assignable_archetype<> foo; function_requires< SGIAssignable >(); } { typedef copy_constructible_archetype<> foo; typedef convertible_to_archetype convertible_to_foo; function_requires< Convertible >(); } { function_requires< Convertible >(); } { typedef equality_comparable_archetype<> foo; function_requires< EqualityComparable >(); } { typedef less_than_comparable_archetype<> foo; function_requires< LessThanComparable >(); } { typedef comparable_archetype<> foo; function_requires< Comparable >(); } { typedef equal_op_first_archetype<> First; typedef equal_op_second_archetype<> Second; function_requires< EqualOp >(); } { typedef not_equal_op_first_archetype<> First; typedef not_equal_op_second_archetype<> Second; function_requires< NotEqualOp >(); } { typedef less_than_op_first_archetype<> First; typedef less_than_op_second_archetype<> Second; function_requires< LessThanOp >(); } { typedef less_equal_op_first_archetype<> First; typedef less_equal_op_second_archetype<> Second; function_requires< LessEqualOp >(); } { typedef greater_than_op_first_archetype<> First; typedef greater_than_op_second_archetype<> Second; function_requires< GreaterThanOp >(); } { typedef greater_equal_op_first_archetype<> First; typedef greater_equal_op_second_archetype<> Second; function_requires< GreaterEqualOp >(); } { typedef copy_constructible_archetype<> Return; typedef plus_op_first_archetype First; typedef plus_op_second_archetype Second; function_requires< PlusOp >(); } //=========================================================================== // Function Object Concepts { typedef generator_archetype > foo; function_requires< Generator > >(); } #if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION { function_requires< Generator< void_generator_archetype, void > >(); } #endif { typedef unary_function_archetype F; function_requires< UnaryFunction >(); } { typedef binary_function_archetype F; function_requires< BinaryFunction >(); } { typedef unary_predicate_archetype F; function_requires< UnaryPredicate >(); } { typedef binary_predicate_archetype F; function_requires< BinaryPredicate >(); } //=========================================================================== // Iterator Concepts { typedef input_iterator_archetype > Iter; function_requires< InputIterator >(); } { typedef output_iterator_archetype Iter; function_requires< OutputIterator >(); } { typedef input_output_iterator_archetype Iter; function_requires< InputIterator >(); function_requires< OutputIterator >(); } { typedef forward_iterator_archetype > Iter; function_requires< ForwardIterator >(); } { typedef mutable_forward_iterator_archetype > Iter; function_requires< Mutable_ForwardIterator >(); } { typedef bidirectional_iterator_archetype > Iter; function_requires< BidirectionalIterator >(); } { typedef mutable_bidirectional_iterator_archetype > Iter; function_requires< Mutable_BidirectionalIterator >(); } { typedef random_access_iterator_archetype > Iter; function_requires< RandomAccessIterator >(); } { typedef mutable_random_access_iterator_archetype > Iter; function_requires< Mutable_RandomAccessIterator >(); } //=========================================================================== // Container Concepts // UNDER CONSTRUCTION return 0; }