Changes made while bringing boost/concept_check.hpp to v3's concept_check.h:1) File format changed from DOS to Unix.2) Boost config.hpp and other workaround files dropped (unneeded in g++ v3).3) Conditionally-compiled code depending on those "breakage" macros wasremoved, or not, depending on the macro, so that the macros themselvesare gone. Since the same code would always be compiled, let's make iteasier on the reader and a few milliseconds faster for cpplib.4) Tests for NDEBUG were removed; if NDEBUG is defined, none of the checkingcode will even be included.5) BOOST_CLASS_REQUIRES* changed to accept a namespace parameter.6) SameTypeConcept added (simple wrapper around existing code).7) An unused variable in OutputIteratorConcept was removed.At checkin, this was the exact diff, modulo the end-of-line character changes:--- concept_check.hpp.orig Sun Apr 1 08:59:46 2001+++ boost_concept_check.h Mon Apr 2 18:56:41 2001@@ -5,20 +5,15 @@// "as is" without express or implied warranty, and with no claim as// to its suitability for any purpose.//++// GCC Note: based on version 1.12.0 of the Boost library.#ifndef BOOST_CONCEPT_CHECKS_HPP#define BOOST_CONCEPT_CHECKS_HPP-#include <boost/config.hpp>-#include <boost/iterator.hpp>-#include <boost/iterator.hpp>-#include <utility>-#include <boost/pending/limits.hpp>--#if (__GNUC__) || defined(__KCC) || defined(__ghs) || defined(__MWERKS__)-#define BOOST_FPTR &-#else-#define BOOST_FPTR-#endif+#pragma GCC system_header+#include <bits/stl_iterator_base_types.h> // for traits and tags+#include <utility> // for pair<>+namespace boost {@@ -27,80 +22,64 @@template <class Concept>void function_requires(){-#if !defined(NDEBUG)- void (Concept::*x)() = BOOST_FPTR Concept::constraints;+ void (Concept::*x)() = &Concept::constraints;ignore_unused_variable_warning(x);-#endif}-// The BOOST_CLASS_REQUIRES macros use function pointers as-// template parameters, which VC++ does not support.--#if defined(BOOST_NO_FUNCTION_PTR_TEMPLATE_PARAMETERS)--#define BOOST_CLASS_REQUIRES(type_var, concept)-#define BOOST_CLASS_REQUIRES2(type_var1, type_var2, concept)-#define BOOST_CLASS_REQUIRES3(type_var1, type_var2, type_var3, concept)-#define BOOST_CLASS_REQUIRES4(type_var1, type_var2, type_var3, type_var4, concept)-#else--#define BOOST_CLASS_REQUIRES(type_var, concept) \- typedef void (concept <type_var>::* func##type_var##concept)(); \+#define BOOST_CLASS_REQUIRES(type_var, ns, concept) \+ typedef void (ns::concept <type_var>::* func##type_var##concept)(); \template <func##type_var##concept _Tp1> \struct concept_checking_##type_var##concept { }; \typedef concept_checking_##type_var##concept< \- BOOST_FPTR concept <type_var>::constraints> \+ &ns::concept <type_var>::constraints> \concept_checking_typedef_##type_var##concept-#define BOOST_CLASS_REQUIRES2(type_var1, type_var2, concept) \- typedef void (concept <type_var1,type_var2>::* func##type_var1##type_var2##concept)(); \+#define BOOST_CLASS_REQUIRES2(type_var1, type_var2, ns, concept) \+ typedef void (ns::concept <type_var1,type_var2>::* func##type_var1##type_var2##concept)(); \template <func##type_var1##type_var2##concept _Tp1> \struct concept_checking_##type_var1##type_var2##concept { }; \typedef concept_checking_##type_var1##type_var2##concept< \- BOOST_FPTR concept <type_var1,type_var2>::constraints> \+ &ns::concept <type_var1,type_var2>::constraints> \concept_checking_typedef_##type_var1##type_var2##concept-#define BOOST_CLASS_REQUIRES3(type_var1, type_var2, type_var3, concept) \- typedef void (concept <type_var1,type_var2,type_var3>::* func##type_var1##type_var2##type_var3##concept)(); \+#define BOOST_CLASS_REQUIRES3(type_var1, type_var2, type_var3, ns, concept) \+ typedef void (ns::concept <type_var1,type_var2,type_var3>::* func##type_var1##type_var2##type_var3##concept)(); \template <func##type_var1##type_var2##type_var3##concept _Tp1> \struct concept_checking_##type_var1##type_var2##type_var3##concept { }; \typedef concept_checking_##type_var1##type_var2##type_var3##concept< \- BOOST_FPTR concept <type_var1,type_var2,type_var3>::constraints> \+ &ns::concept <type_var1,type_var2,type_var3>::constraints> \concept_checking_typedef_##type_var1##type_var2##type_var3##concept-#define BOOST_CLASS_REQUIRES4(type_var1, type_var2, type_var3, type_var4, concept) \- typedef void (concept <type_var1,type_var2,type_var3,type_var4>::* func##type_var1##type_var2##type_var3##type_var4##concept)(); \+#define BOOST_CLASS_REQUIRES4(type_var1, type_var2, type_var3, type_var4, ns, concept) \+ typedef void (ns::concept <type_var1,type_var2,type_var3,type_var4>::* func##type_var1##type_var2##type_var3##type_var4##concept)(); \template <func##type_var1##type_var2##type_var3##type_var4##concept _Tp1> \struct concept_checking_##type_var1##type_var2##type_var3##type_var4##concept { }; \typedef concept_checking_##type_var1##type_var2##type_var3##type_var4##concept< \- BOOST_FPTR concept <type_var1,type_var2,type_var3,type_var4>::constraints> \+ &ns::concept <type_var1,type_var2,type_var3,type_var4>::constraints> \concept_checking_typedef_##type_var1##type_var2##type_var3##type_var4##concept-#endif--#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATIONtemplate <class T, class U>struct require_same { };template <class T>struct require_same<T,T> { typedef T type; };-#else-// This version does not perform checking, but will not do any harm.-template <class T, class U>-struct require_same { typedef T type; };-#endif++ template <class T, class U>+ struct SameTypeConcept+ {+ void constraints() {+ typedef typename require_same<T, U>::type req;+ }+ };template <class T>struct IntegerConcept {void constraints() {-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATIONerrortype_must_be_an_integer_type();-#endif}};-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATIONtemplate <> struct IntegerConcept<short> { void constraints() {} };template <> struct IntegerConcept<unsigned short> { void constraints() {} };template <> struct IntegerConcept<int> { void constraints() {} };@@ -108,32 +87,24 @@template <> struct IntegerConcept<long> { void constraints() {} };template <> struct IntegerConcept<unsigned long> { void constraints() {} };// etc.-#endiftemplate <class T>struct SignedIntegerConcept {void constraints() {-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATIONerrortype_must_be_a_signed_integer_type();-#endif}};-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATIONtemplate <> struct SignedIntegerConcept<short> { void constraints() {} };template <> struct SignedIntegerConcept<int> { void constraints() {} };template <> struct SignedIntegerConcept<long> { void constraints() {} };// etc.-#endiftemplate <class T>struct UnsignedIntegerConcept {void constraints() {-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATIONerrortype_must_be_an_unsigned_integer_type();-#endif}};-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATIONtemplate <> struct UnsignedIntegerConcept<unsigned short>{ void constraints() {} };template <> struct UnsignedIntegerConcept<unsigned int>@@ -141,7 +112,6 @@template <> struct UnsignedIntegerConcept<unsigned long>{ void constraints() {} };// etc.-#endif//===========================================================================// Basic Concepts@@ -159,15 +129,11 @@struct AssignableConcept{void constraints() {-#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STLa = a; // require assignment operator-#endifconst_constraints(a);}void const_constraints(const TT& b) {-#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STLa = b; // const required for argument to assignment-#endif}TT a;};@@ -196,17 +162,13 @@{void constraints() {TT b(a);-#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STLa = a; // require assignment operator-#endifconst_constraints(a);ignore_unused_variable_warning(b);}void const_constraints(const TT& b) {TT c(b);-#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STLa = b; // const required for argument to assignment-#endifignore_unused_variable_warning(c);}TT a;@@ -304,6 +266,9 @@BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(-, SubtractOpConcept);BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(%, ModOpConcept);+#undef BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT+#undef BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT+//===========================================================================// Function Object Concepts@@ -318,7 +283,6 @@};-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATIONtemplate <class Func>struct GeneratorConcept<Func,void>{@@ -327,7 +291,6 @@}Func f;};-#endiftemplate <class Func, class Return, class Arg>struct UnaryFunctionConcept@@ -340,7 +303,6 @@Return r;};-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATIONtemplate <class Func, class Arg>struct UnaryFunctionConcept<Func, void, Arg> {void constraints() {@@ -348,7 +310,6 @@}Func f;};-#endiftemplate <class Func, class Return, class First, class Second>struct BinaryFunctionConcept@@ -362,7 +323,6 @@Return r;};-#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATIONtemplate <class Func, class First, class Second>struct BinaryFunctionConcept<Func, void, First, Second>{@@ -373,7 +333,6 @@First first;Second second;};-#endiftemplate <class Func, class Arg>struct UnaryPredicateConcept@@ -422,9 +381,7 @@function_requires< AssignableConcept<TT> >();function_requires< DefaultConstructibleConcept<TT> >();function_requires< EqualityComparableConcept<TT> >();-#ifndef BOOST_NO_STD_ITERATOR_TRAITStypedef typename std::iterator_traits<TT>::value_type V;-#endif(void)*i; // require dereference operator}TT i;@@ -446,7 +403,6 @@void constraints() {function_requires< TrivialIteratorConcept<TT> >();// require iterator_traits typedef's-#ifndef BOOST_NO_STD_ITERATOR_TRAITStypedef typename std::iterator_traits<TT>::difference_type D;function_requires< SignedIntegerConcept<D> >();typedef typename std::iterator_traits<TT>::reference R;@@ -455,7 +411,6 @@function_requires< ConvertibleConcept<typename std::iterator_traits<TT>::iterator_category,std::input_iterator_tag> >();-#endif++i; // require preincrement operatori++; // require postincrement operator}@@ -471,7 +426,7 @@i++; // require postincrement operator*i++ = t; // require postincrement and assignment}- TT i, j;+ TT i;ValueT t;};@@ -480,14 +435,12 @@{void constraints() {function_requires< InputIteratorConcept<TT> >();-#ifndef BOOST_NO_STD_ITERATOR_TRAITSfunction_requires< ConvertibleConcept<typename std::iterator_traits<TT>::iterator_category,std::forward_iterator_tag> >();typedef typename std::iterator_traits<TT>::reference reference;reference r = *i;ignore_unused_variable_warning(r);-#endif}TT i;};@@ -507,11 +460,9 @@{void constraints() {function_requires< ForwardIteratorConcept<TT> >();-#ifndef BOOST_NO_STD_ITERATOR_TRAITSfunction_requires< ConvertibleConcept<typename std::iterator_traits<TT>::iterator_category,std::bidirectional_iterator_tag> >();-#endif--i; // require predecrement operatori--; // require postdecrement operator}@@ -536,12 +487,10 @@void constraints() {function_requires< BidirectionalIteratorConcept<TT> >();function_requires< ComparableConcept<TT> >();-#ifndef BOOST_NO_STD_ITERATOR_TRAITSfunction_requires< ConvertibleConcept<typename std::iterator_traits<TT>::iterator_category,std::random_access_iterator_tag> >();typedef typename std::iterator_traits<TT>::reference R;-#endifi += n; // require assignment addition operatori = i + n; i = n + i; // require addition with difference type@@ -552,11 +501,7 @@}TT a, b;TT i, j;-#ifndef BOOST_NO_STD_ITERATOR_TRAITStypename std::iterator_traits<TT>::difference_type n;-#else- std::ptrdiff_t n;-#endif};template <class TT>@@ -568,11 +513,7 @@i[n] = *i; // require element access and assignment}TT i;-#ifndef BOOST_NO_STD_ITERATOR_TRAITStypename std::iterator_traits<TT>::difference_type n;-#else- std::ptrdiff_t n;-#endif};//===========================================================================