// (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< DefaultConstructibleConcept >(); } { typedef assignable_archetype<> foo; function_requires< AssignableConcept >(); } { typedef copy_constructible_archetype<> foo; function_requires< CopyConstructibleConcept >(); } { typedef sgi_assignable_archetype<> foo; function_requires< SGIAssignableConcept >(); } { typedef copy_constructible_archetype<> foo; typedef convertible_to_archetype convertible_to_foo; function_requires< ConvertibleConcept >(); } { function_requires< ConvertibleConcept >(); } { typedef equality_comparable_archetype<> foo; function_requires< EqualityComparableConcept >(); } { typedef less_than_comparable_archetype<> foo; function_requires< LessThanComparableConcept >(); } { typedef comparable_archetype<> foo; function_requires< ComparableConcept >(); } { typedef equal_op_first_archetype<> First; typedef equal_op_second_archetype<> Second; function_requires< EqualOpConcept >(); } { typedef not_equal_op_first_archetype<> First; typedef not_equal_op_second_archetype<> Second; function_requires< NotEqualOpConcept >(); } { typedef less_than_op_first_archetype<> First; typedef less_than_op_second_archetype<> Second; function_requires< LessThanOpConcept >(); } { typedef less_equal_op_first_archetype<> First; typedef less_equal_op_second_archetype<> Second; function_requires< LessEqualOpConcept >(); } { typedef greater_than_op_first_archetype<> First; typedef greater_than_op_second_archetype<> Second; function_requires< GreaterThanOpConcept >(); } { typedef greater_equal_op_first_archetype<> First; typedef greater_equal_op_second_archetype<> Second; function_requires< GreaterEqualOpConcept >(); } { typedef copy_constructible_archetype<> Return; typedef plus_op_first_archetype First; typedef plus_op_second_archetype Second; function_requires< PlusOpConcept >(); } //=========================================================================== // Function Object Concepts { typedef generator_archetype > foo; function_requires< GeneratorConcept > >(); } #if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION { function_requires< GeneratorConcept< void_generator_archetype, void > >(); } #endif { typedef unary_function_archetype F; function_requires< UnaryFunctionConcept >(); } { typedef binary_function_archetype F; function_requires< BinaryFunctionConcept >(); } { typedef unary_predicate_archetype F; function_requires< UnaryPredicateConcept >(); } { typedef binary_predicate_archetype F; function_requires< BinaryPredicateConcept >(); } //=========================================================================== // Iterator Concepts { typedef input_iterator_archetype > Iter; function_requires< InputIteratorConcept >(); } { typedef output_iterator_archetype Iter; function_requires< OutputIteratorConcept >(); } { typedef input_output_iterator_archetype Iter; function_requires< InputIteratorConcept >(); function_requires< OutputIteratorConcept >(); } { typedef forward_iterator_archetype > Iter; function_requires< ForwardIteratorConcept >(); } { typedef mutable_forward_iterator_archetype > Iter; function_requires< Mutable_ForwardIteratorConcept >(); } { typedef bidirectional_iterator_archetype > Iter; function_requires< BidirectionalIteratorConcept >(); } { typedef mutable_bidirectional_iterator_archetype > Iter; function_requires< Mutable_BidirectionalIteratorConcept >(); } { typedef random_access_iterator_archetype > Iter; function_requires< RandomAccessIteratorConcept >(); } { typedef mutable_random_access_iterator_archetype > Iter; function_requires< Mutable_RandomAccessIteratorConcept >(); } //=========================================================================== // Container Concepts // UNDER CONSTRUCTION return 0; }