19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999
39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc.
49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use, copy, modify, distribute and sell this software
69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * and its documentation for any purpose is hereby granted without fee,
79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided that the above copyright notice appear in all copies and
89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * that both that copyright notice and this permission notice appear
99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * in supporting documentation.  Silicon Graphics makes no
109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * representations about the suitability of this software for any
119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * purpose.  It is provided "as is" without express or implied warranty.
129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef __CONCEPT_CHECKS_H
159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define __CONCEPT_CHECKS_H
169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  Use these macro like assertions, but they assert properties
199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  on types (usually template arguments). In technical terms they
209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  verify whether a type "models" a "concept".
219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  This set of requirements and the terminology used here is derived
239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  from the book "Generic Programming and the STL" by Matt Austern
249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  (Addison Wesley). For further information please consult that
259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  book. The requirements also are intended to match the ANSI/ISO C++
269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  standard.
279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  This file covers the basic concepts and the iterator concepts.
299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  There are several other files that provide the requirements
309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  for the STL containers:
319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    container_concepts.h
329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    sequence_concepts.h
339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    assoc_container_concepts.h
349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  Jeremy Siek, 1999
369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  TO DO:
389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    - some issues with regards to concept classification and mutability
399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      including AssociativeContianer -> ForwardContainer
409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      and SortedAssociativeContainer -> ReversibleContainer
419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    - HashedAssociativeContainer
429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    - Allocator
439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    - Function Object Concepts
449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  */
469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_USE_CONCEPT_CHECKS
489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Some compilers lack the features that are necessary for concept checks.
509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// On those compilers we define the concept check macros to do nothing.
519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_REQUIRES(__type_var, __concept) do {} while(0)
529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CLASS_REQUIRES(__type_var, __concept) \
539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static int  __##__type_var##_##__concept
549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CONVERTIBLE(__type_x, __type_y) do {} while(0)
559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_REQUIRES_SAME_TYPE(__type_x, __type_y) do {} while(0)
569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CLASS_REQUIRES_SAME_TYPE(__type_x, __type_y) \
579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static int  __##__type_x##__type_y##_require_same_type
589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_GENERATOR_CHECK(__func, __ret) do {} while(0)
599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CLASS_GENERATOR_CHECK(__func, __ret) \
609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static int  __##__func##__ret##_generator_check
619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_UNARY_FUNCTION_CHECK(__func, __ret, __arg) do {} while(0)
629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CLASS_UNARY_FUNCTION_CHECK(__func, __ret, __arg) \
639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static int  __##__func##__ret##__arg##_unary_function_check
649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_BINARY_FUNCTION_CHECK(__func, __ret, __first, __second) \
659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  do {} while(0)
669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CLASS_BINARY_FUNCTION_CHECK(__func, __ret, __first, __second) \
679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static int  __##__func##__ret##__first##__second##_binary_function_check
689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_REQUIRES_BINARY_OP(__opname, __ret, __first, __second) \
699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  do {} while(0)
709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CLASS_REQUIRES_BINARY_OP(__opname, __ret, __first, __second) \
719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static int __##__opname##__ret##__first##__second##_require_binary_op
729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else /* _STLP_USE_CONCEPT_CHECKS */
749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// This macro tests whether the template argument "__type_var"
769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// satisfies the requirements of "__concept".  Here is a list of concepts
779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// that we know how to check:
789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//       _Allocator
799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//       _Assignable
809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//       _DefaultConstructible
819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//       _EqualityComparable
829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//       _LessThanComparable
839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//       _TrivialIterator
849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//       _InputIterator
859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//       _OutputIterator
869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//       _ForwardIterator
879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//       _BidirectionalIterator
889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//       _RandomAccessIterator
899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//       _Mutable_TrivialIterator
909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//       _Mutable_ForwardIterator
919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//       _Mutable_BidirectionalIterator
929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//       _Mutable_RandomAccessIterator
939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_REQUIRES(__type_var, __concept) \
959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockdo { \
969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void (*__x)( __type_var ) = __concept##_concept_specification< __type_var >\
979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    ::##__concept##_requirement_violation; __x = __x; } while (0)
989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Use this to check whether type X is convertible to type Y
1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CONVERTIBLE(__type_x, __type_y) \
1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockdo { \
1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void (*__x)( __type_x , __type_y ) = _STL_CONVERT_ERROR< __type_x , \
1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __type_y >::__type_X_is_not_convertible_to_type_Y; \
1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __x = __x; } while (0)
1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Use this to test whether two template arguments are the same type
1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_REQUIRES_SAME_TYPE(__type_x, __type_y) \
1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockdo { \
1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void (*__x)( __type_x , __type_y ) = _STL_SAME_TYPE_ERROR< __type_x, \
1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __type_y  >::__type_X_not_same_as_type_Y; \
1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __x = __x; } while (0)
1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// function object checks
1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_GENERATOR_CHECK(__func, __ret) \
1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockdo { \
1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __ret (*__x)( __func&) = \
1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     _STL_GENERATOR_ERROR< \
1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __func, __ret>::__generator_requirement_violation; \
1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __x = __x; } while (0)
1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_UNARY_FUNCTION_CHECK(__func, __ret, __arg) \
1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockdo { \
1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __ret (*__x)( __func&, const __arg& ) = \
1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     _STL_UNARY_FUNCTION_ERROR< \
1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __func, __ret, __arg>::__unary_function_requirement_violation; \
1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __x = __x; } while (0)
1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_BINARY_FUNCTION_CHECK(__func, __ret, __first, __second) \
1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockdo { \
1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __ret (*__x)( __func&, const __first&, const __second& ) = \
1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block     _STL_BINARY_FUNCTION_ERROR< \
1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __func, __ret, __first, __second>::__binary_function_requirement_violation; \
1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __x = __x; } while (0)
1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_REQUIRES_BINARY_OP(__opname, __ret, __first, __second) \
1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    do { \
1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __ret (*__x)( __first&, __second& ) = _STL_BINARY##__opname##_ERROR< \
1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __ret, __first, __second>::__binary_operator_requirement_violation; \
1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __ret (*__y)( const __first&, const __second& ) = \
1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STL_BINARY##__opname##_ERROR< __ret, __first, __second>:: \
1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __const_binary_operator_requirement_violation; \
1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __y = __y; __x = __x; } while (0)
1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef _STLP_NO_FUNCTION_PTR_IN_CLASS_TEMPLATE
1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CLASS_REQUIRES(__type_var, __concept)
1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CLASS_REQUIRES_SAME_TYPE(__type_x, __type_y)
1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CLASS_GENERATOR_CHECK(__func, __ret)
1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CLASS_UNARY_FUNCTION_CHECK(__func, __ret, __arg)
1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CLASS_BINARY_FUNCTION_CHECK(__func, __ret, __first, __second)
1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CLASS_REQUIRES_BINARY_OP(__opname, __ret, __first, __second)
1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Use this macro inside of template classes, where you would
1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// like to place requirements on the template arguments to the class
1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Warning: do not pass pointers and such (e.g. T*) in as the __type_var,
1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// since the type_var is used to construct identifiers. Instead typedef
1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// the pointer type, then use the typedef name for the __type_var.
1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CLASS_REQUIRES(__type_var, __concept) \
1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (* __func##__type_var##__concept)( __type_var ); \
1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <__func##__type_var##__concept _Tp1> \
1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  struct __dummy_struct_##__type_var##__concept { }; \
1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static __dummy_struct_##__type_var##__concept< \
1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __concept##_concept_specification< \
1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __type_var>::__concept##_requirement_violation>  \
1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __dummy_ptr_##__type_var##__concept
1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CLASS_REQUIRES_SAME_TYPE(__type_x, __type_y) \
1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef void (* __func_##__type_x##__type_y##same_type)( __type_x, \
1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                            __type_y ); \
1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template < __func_##__type_x##__type_y##same_type _Tp1> \
1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  struct __dummy_struct_##__type_x##__type_y##_same_type { }; \
1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static __dummy_struct_##__type_x##__type_y##_same_type< \
1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STL_SAME_TYPE_ERROR<__type_x, __type_y>::__type_X_not_same_as_type_Y>  \
1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __dummy_ptr_##__type_x##__type_y##_same_type
1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CLASS_GENERATOR_CHECK(__func, __ret) \
1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef __ret (* __f_##__func##__ret##_generator)( __func& ); \
1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <__f_##__func##__ret##_generator _Tp1> \
1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  struct __dummy_struct_##__func##__ret##_generator { }; \
1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static __dummy_struct_##__func##__ret##_generator< \
1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STL_GENERATOR_ERROR< \
1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __func, __ret>::__generator_requirement_violation>  \
1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __dummy_ptr_##__func##__ret##_generator
1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CLASS_UNARY_FUNCTION_CHECK(__func, __ret, __arg) \
1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef __ret (* __f_##__func##__ret##__arg##_unary_check)( __func&, \
1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                         const __arg& ); \
1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <__f_##__func##__ret##__arg##_unary_check _Tp1> \
1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  struct __dummy_struct_##__func##__ret##__arg##_unary_check { }; \
2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static __dummy_struct_##__func##__ret##__arg##_unary_check< \
2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STL_UNARY_FUNCTION_ERROR< \
2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __func, __ret, __arg>::__unary_function_requirement_violation>  \
2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __dummy_ptr_##__func##__ret##__arg##_unary_check
2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CLASS_BINARY_FUNCTION_CHECK(__func, __ret, __first, __second) \
2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef __ret (* __f_##__func##__ret##__first##__second##_binary_check)( __func&, const __first&,\
2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                    const __second& ); \
2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <__f_##__func##__ret##__first##__second##_binary_check _Tp1> \
2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  struct __dummy_struct_##__func##__ret##__first##__second##_binary_check { }; \
2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static __dummy_struct_##__func##__ret##__first##__second##_binary_check< \
2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STL_BINARY_FUNCTION_ERROR<__func, __ret, __first, __second>:: \
2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __binary_function_requirement_violation>  \
2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __dummy_ptr_##__func##__ret##__first##__second##_binary_check
2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_CLASS_REQUIRES_BINARY_OP(__opname, __ret, __first, __second) \
2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef __ret (* __f_##__func##__ret##__first##__second##_binary_op)(const __first&, \
2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                    const __second& ); \
2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <__f_##__func##__ret##__first##__second##_binary_op _Tp1> \
2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  struct __dummy_struct_##__func##__ret##__first##__second##_binary_op { }; \
2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static __dummy_struct_##__func##__ret##__first##__second##_binary_op< \
2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STL_BINARY##__opname##_ERROR<__ret, __first, __second>:: \
2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __binary_operator_requirement_violation>  \
2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __dummy_ptr_##__func##__ret##__first##__second##_binary_op
2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* helper class for finding non-const version of a type. Need to have
2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block   something to assign to etc. when testing constant iterators. */
2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp>
2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Mutable_trait {
2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Tp _Type;
2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp>
2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Mutable_trait<const _Tp> {
2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Tp _Type;
2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* helper function for avoiding compiler warnings about unused variables */
2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Type>
2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid __sink_unused_warning(_Type) { }
2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _TypeX, class _TypeY>
2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _STL_CONVERT_ERROR {
2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static void
2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __type_X_is_not_convertible_to_type_Y(_TypeX __x, _TypeY) {
2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _TypeY __y = __x;
2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __sink_unused_warning(__y);
2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Type> struct __check_equal { };
2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _TypeX, class _TypeY>
2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _STL_SAME_TYPE_ERROR {
2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static void
2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __type_X_not_same_as_type_Y(_TypeX , _TypeY ) {
2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __check_equal<_TypeX> t1 = __check_equal<_TypeY>();
2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Some Functon Object Checks
2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Func, class _Ret>
2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _STL_GENERATOR_ERROR {
2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static _Ret __generator_requirement_violation(_Func& __f) {
2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __f();
2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Func>
2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _STL_GENERATOR_ERROR<_Func, void> {
2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static void __generator_requirement_violation(_Func& __f) {
2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __f();
2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Func, class _Ret, class _Arg>
2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _STL_UNARY_FUNCTION_ERROR {
2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static _Ret
2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __unary_function_requirement_violation(_Func& __f,
2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                          const _Arg& __arg) {
2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __f(__arg);
2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Func, class _Arg>
2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _STL_UNARY_FUNCTION_ERROR<_Func, void, _Arg> {
2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static void
2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __unary_function_requirement_violation(_Func& __f,
2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                          const _Arg& __arg) {
2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __f(__arg);
2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Func, class _Ret, class _First, class _Second>
3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _STL_BINARY_FUNCTION_ERROR {
3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static _Ret
3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __binary_function_requirement_violation(_Func& __f,
3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                          const _First& __first,
3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                          const _Second& __second) {
3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __f(__first, __second);
3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Func, class _First, class _Second>
3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _STL_BINARY_FUNCTION_ERROR<_Func, void, _First, _Second> {
3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static void
3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __binary_function_requirement_violation(_Func& __f,
3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                          const _First& __first,
3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                          const _Second& __second) {
3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __f(__first, __second);
3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_DEFINE_BINARY_OP_CHECK(_OP, _NAME) \
3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Ret, class _First, class _Second> \
3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _STL_BINARY##_NAME##_ERROR { \
3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static _Ret \
3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __const_binary_operator_requirement_violation(const _First& __first,  \
3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                const _Second& __second) { \
3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __first _OP __second; \
3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  } \
3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static _Ret \
3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __binary_operator_requirement_violation(_First& __first,  \
3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                          _Second& __second) { \
3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __first _OP __second; \
3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  } \
3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEFINE_BINARY_OP_CHECK(==, _OP_EQUAL);
3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEFINE_BINARY_OP_CHECK(!=, _OP_NOT_EQUAL);
3409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEFINE_BINARY_OP_CHECK(<, _OP_LESS_THAN);
3419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEFINE_BINARY_OP_CHECK(<=, _OP_LESS_EQUAL);
3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEFINE_BINARY_OP_CHECK(>, _OP_GREATER_THAN);
3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEFINE_BINARY_OP_CHECK(>=, _OP_GREATER_EQUAL);
3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEFINE_BINARY_OP_CHECK(+, _OP_PLUS);
3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEFINE_BINARY_OP_CHECK(*, _OP_TIMES);
3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEFINE_BINARY_OP_CHECK(/, _OP_DIVIDE);
3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEFINE_BINARY_OP_CHECK(-, _OP_SUBTRACT);
3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DEFINE_BINARY_OP_CHECK(%, _OP_MOD);
3499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// ...
3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// TODO, add unary operators (prefix and postfix)
3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  The presence of this class is just to trick EDG into displaying
3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  these error messages before any other errors. Without the
3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  classes, the errors in the functions get reported after
3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  other class errors deep inside the library. The name
3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  choice just makes for an eye catching error message :)
3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _STL_ERROR {
3619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Type>
3639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static _Type
3649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __default_constructor_requirement_violation(_Type) {
3659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _Type();
3669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Type>
3689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static _Type
3699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __assignment_operator_requirement_violation(_Type __a) {
3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __a = __a;
3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __a;
3729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Type>
3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static _Type
3759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __copy_constructor_requirement_violation(_Type __a) {
3769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Type __c(__a);
3779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __c;
3789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Type>
3809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static _Type
3819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __const_parameter_required_for_copy_constructor(_Type /* __a */,
3829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                  const _Type& __b) {
3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Type __c(__b);
3849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __c;
3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Type>
3879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static _Type
3889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __const_parameter_required_for_assignment_operator(_Type __a,
3899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                     const _Type& __b) {
3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __a = __b;
3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __a;
3929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Type>
3949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static _Type
3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __less_than_comparable_requirement_violation(_Type __a, _Type __b) {
3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__a < __b || __a > __b || __a <= __b || __a >= __b) return __a;
3979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __b;
3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Type>
4009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static _Type
4019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __equality_comparable_requirement_violation(_Type __a, _Type __b) {
4029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__a == __b || __a != __b) return __a;
4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __b;
4049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Iterator>
4069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static void
4079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __dereference_operator_requirement_violation(_Iterator __i) {
4089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __sink_unused_warning(*__i);
4099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Iterator>
4119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static void
4129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __dereference_operator_and_assignment_requirement_violation(_Iterator __i) {
4139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    *__i = *__i;
4149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Iterator>
4169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static void
4179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __preincrement_operator_requirement_violation(_Iterator __i) {
4189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    ++__i;
4199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Iterator>
4219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static void
4229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __postincrement_operator_requirement_violation(_Iterator __i) {
4239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __i++;
4249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Iterator>
4269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static void
4279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __predecrement_operator_requirement_violation(_Iterator __i) {
4289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    --__i;
4299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Iterator>
4319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static void
4329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __postdecrement_operator_requirement_violation(_Iterator __i) {
4339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __i--;
4349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Iterator, class _Type>
4369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static void
4379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __postincrement_operator_and_assignment_requirement_violation(_Iterator __i,
4389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                                _Type __t) {
4399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    *__i++ = __t;
4409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Iterator, class _Distance>
4429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static _Iterator
4439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __iterator_addition_assignment_requirement_violation(_Iterator __i,
4449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                       _Distance __n) {
4459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __i += __n;
4469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __i;
4479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Iterator, class _Distance>
4499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static _Iterator
4509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __iterator_addition_requirement_violation(_Iterator __i, _Distance __n) {
4519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __i = __i + __n;
4529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __i = __n + __i;
4539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __i;
4549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Iterator, class _Distance>
4569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static _Iterator
4579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __iterator_subtraction_assignment_requirement_violation(_Iterator __i,
4589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                          _Distance __n) {
4599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __i -= __n;
4609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __i;
4619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Iterator, class _Distance>
4639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static _Iterator
4649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __iterator_subtraction_requirement_violation(_Iterator __i, _Distance __n) {
4659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __i = __i - __n;
4669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __i;
4679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Iterator, class _Distance>
4699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static _Distance
4709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __difference_operator_requirement_violation(_Iterator __i, _Iterator __j,
4719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                              _Distance __n) {
4729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __n = __i - __j;
4739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __n;
4749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Exp, class _Type, class _Distance>
4769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static _Type
4779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __element_access_operator_requirement_violation(_Exp __x, _Type*,
4789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                  _Distance __n) {
4799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return __x[__n];
4809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _Exp, class _Type, class _Distance>
4829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static void
4839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __element_assignment_operator_requirement_violation(_Exp __x,
4849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                      _Type* __t,
4859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                      _Distance __n) {
4869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __x[__n] = *__t;
4879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; /* _STL_ERROR */
4909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Associated Type Requirements */
4929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE
4949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> struct iterator_traits;
4959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE
4969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iter>
4989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct __value_type_type_definition_requirement_violation {
4999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename __STD::iterator_traits<_Iter>::value_type value_type;
5009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iter>
5039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct __difference_type_type_definition_requirement_violation {
5049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename __STD::iterator_traits<_Iter>::difference_type
5059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          difference_type;
5069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iter>
5099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct __reference_type_definition_requirement_violation {
5109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename __STD::iterator_traits<_Iter>::reference reference;
5119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iter>
5149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct __pointer_type_definition_requirement_violation {
5159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename __STD::iterator_traits<_Iter>::pointer pointer;
5169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iter>
5199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct __iterator_category_type_definition_requirement_violation {
5209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename __STD::iterator_traits<_Iter>::iterator_category
5219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block          iterator_category;
5229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* Assignable Requirements */
5259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Type>
5289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Assignable_concept_specification {
5299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static void _Assignable_requirement_violation(_Type __a) {
5309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STL_ERROR::__assignment_operator_requirement_violation(__a);
5319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STL_ERROR::__copy_constructor_requirement_violation(__a);
5329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STL_ERROR::__const_parameter_required_for_copy_constructor(__a,__a);
5339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STL_ERROR::__const_parameter_required_for_assignment_operator(__a,__a);
5349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* DefaultConstructible Requirements */
5389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Type>
5419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _DefaultConstructible_concept_specification {
5429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static void _DefaultConstructible_requirement_violation(_Type __a) {
5439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STL_ERROR::__default_constructor_requirement_violation(__a);
5449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* EqualityComparable Requirements */
5489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Type>
5509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _EqualityComparable_concept_specification {
5519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static void _EqualityComparable_requirement_violation(_Type __a) {
5529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STL_ERROR::__equality_comparable_requirement_violation(__a, __a);
5539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* LessThanComparable Requirements */
5579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Type>
5589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _LessThanComparable_concept_specification {
5599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static void _LessThanComparable_requirement_violation(_Type __a) {
5609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STL_ERROR::__less_than_comparable_requirement_violation(__a, __a);
5619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* TrivialIterator Requirements */
5659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _TrivialIterator>
5679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _TrivialIterator_concept_specification {
5689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstatic void
5699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_TrivialIterator_requirement_violation(_TrivialIterator __i) {
5709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename
5719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __value_type_type_definition_requirement_violation<_TrivialIterator>::
5729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    value_type __T;
5739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Refinement of Assignable
5749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Assignable_concept_specification<_TrivialIterator>::
5759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Assignable_requirement_violation(__i);
5769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Refinement of DefaultConstructible
5779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _DefaultConstructible_concept_specification<_TrivialIterator>::
5789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _DefaultConstructible_requirement_violation(__i);
5799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Refinement of EqualityComparable
5809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _EqualityComparable_concept_specification<_TrivialIterator>::
5819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _EqualityComparable_requirement_violation(__i);
5829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Valid Expressions
5839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STL_ERROR::__dereference_operator_requirement_violation(__i);
5849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
5859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _TrivialIterator>
5889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Mutable_TrivialIterator_concept_specification {
5899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstatic void
5909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_Mutable_TrivialIterator_requirement_violation(_TrivialIterator __i) {
5919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _TrivialIterator_concept_specification<_TrivialIterator>::
5929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _TrivialIterator_requirement_violation(__i);
5939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Valid Expressions
5949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STL_ERROR::__dereference_operator_and_assignment_requirement_violation(__i);
5959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
5969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
5979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* InputIterator Requirements */
5999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIterator>
6019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _InputIterator_concept_specification {
6029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstatic void
6039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_InputIterator_requirement_violation(_InputIterator __i) {
6049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Refinement of TrivialIterator
6059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _TrivialIterator_concept_specification<_InputIterator>::
6069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _TrivialIterator_requirement_violation(__i);
6079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Associated Types
6089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __difference_type_type_definition_requirement_violation<_InputIterator>();
6099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __reference_type_definition_requirement_violation<_InputIterator>();
6109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __pointer_type_definition_requirement_violation<_InputIterator>();
6119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __iterator_category_type_definition_requirement_violation<_InputIterator>();
6129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Valid Expressions
6139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STL_ERROR::__preincrement_operator_requirement_violation(__i);
6149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STL_ERROR::__postincrement_operator_requirement_violation(__i);
6159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
6169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* OutputIterator Requirements */
6199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _OutputIterator>
6219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _OutputIterator_concept_specification {
6229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstatic void
6239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_OutputIterator_requirement_violation(_OutputIterator __i) {
6249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Refinement of Assignable
6259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Assignable_concept_specification<_OutputIterator>::
6269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Assignable_requirement_violation(__i);
6279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Associated Types
6289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __iterator_category_type_definition_requirement_violation<_OutputIterator>();
6299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Valid Expressions
6309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STL_ERROR::__dereference_operator_requirement_violation(__i);
6319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STL_ERROR::__preincrement_operator_requirement_violation(__i);
6329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STL_ERROR::__postincrement_operator_requirement_violation(__i);
6339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STL_ERROR::
6349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __postincrement_operator_and_assignment_requirement_violation(__i, *__i);
6359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
6369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* ForwardIterator Requirements */
6399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIterator>
6419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _ForwardIterator_concept_specification {
6429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstatic void
6439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_ForwardIterator_requirement_violation(_ForwardIterator __i) {
6449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Refinement of InputIterator
6459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _InputIterator_concept_specification<_ForwardIterator>::
6469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _InputIterator_requirement_violation(__i);
6479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
6489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIterator>
6519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Mutable_ForwardIterator_concept_specification {
6529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstatic void
6539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_Mutable_ForwardIterator_requirement_violation(_ForwardIterator __i) {
6549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _ForwardIterator_concept_specification<_ForwardIterator>::
6559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _ForwardIterator_requirement_violation(__i);
6569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Refinement of OutputIterator
6579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _OutputIterator_concept_specification<_ForwardIterator>::
6589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _OutputIterator_requirement_violation(__i);
6599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
6609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* BidirectionalIterator Requirements */
6639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _BidirectionalIterator>
6659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _BidirectionalIterator_concept_specification {
6669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstatic void
6679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_BidirectionalIterator_requirement_violation(_BidirectionalIterator __i) {
6689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Refinement of ForwardIterator
6699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _ForwardIterator_concept_specification<_BidirectionalIterator>::
6709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _ForwardIterator_requirement_violation(__i);
6719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Valid Expressions
6729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STL_ERROR::__predecrement_operator_requirement_violation(__i);
6739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STL_ERROR::__postdecrement_operator_requirement_violation(__i);
6749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
6759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _BidirectionalIterator>
6789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Mutable_BidirectionalIterator_concept_specification {
6799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstatic void
6809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_Mutable_BidirectionalIterator_requirement_violation(
6819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block       _BidirectionalIterator __i)
6829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{
6839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _BidirectionalIterator_concept_specification<_BidirectionalIterator>::
6849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _BidirectionalIterator_requirement_violation(__i);
6859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Refinement of mutable_ForwardIterator
6869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Mutable_ForwardIterator_concept_specification<_BidirectionalIterator>::
6879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Mutable_ForwardIterator_requirement_violation(__i);
6889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename
6899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __value_type_type_definition_requirement_violation<
6909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _BidirectionalIterator>::value_type __T;
6919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typename _Mutable_trait<__T>::_Type* __tmp_ptr = 0;
6929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Valid Expressions
6939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STL_ERROR::
6949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __postincrement_operator_and_assignment_requirement_violation(__i,
6959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                                  *__tmp_ptr);
6969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
6979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
6989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* RandomAccessIterator Requirements */
7009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandAccIter>
7029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _RandomAccessIterator_concept_specification {
7039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstatic void
7049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_RandomAccessIterator_requirement_violation(_RandAccIter __i) {
7059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Refinement of BidirectionalIterator
7069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _BidirectionalIterator_concept_specification<_RandAccIter>::
7079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _BidirectionalIterator_requirement_violation(__i);
7089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Refinement of LessThanComparable
7099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _LessThanComparable_concept_specification<_RandAccIter>::
7109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _LessThanComparable_requirement_violation(__i);
7119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename
7129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __value_type_type_definition_requirement_violation<_RandAccIter>
7139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        ::value_type
7149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    value_type;
7159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename
7169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __difference_type_type_definition_requirement_violation<_RandAccIter>
7179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        ::difference_type
7189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Dist;
7199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Mutable_trait<_Dist>::_Type _MutDist;
7209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Valid Expressions
7229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STL_ERROR::__iterator_addition_assignment_requirement_violation(__i,
7239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                                   _MutDist());
7249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STL_ERROR::__iterator_addition_requirement_violation(__i,
7259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                        _MutDist());
7269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STL_ERROR::
7279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __iterator_subtraction_assignment_requirement_violation(__i,
7289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                            _MutDist());
7299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STL_ERROR::__iterator_subtraction_requirement_violation(__i,
7309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                           _MutDist());
7319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STL_ERROR::__difference_operator_requirement_violation(__i, __i,
7329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                          _MutDist());
7339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typename _Mutable_trait<value_type>::_Type* __dummy_ptr = 0;
7349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STL_ERROR::__element_access_operator_requirement_violation(__i,
7359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                              __dummy_ptr,
7369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                                              _MutDist());
7379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
7389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
7399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandAccIter>
7419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Mutable_RandomAccessIterator_concept_specification {
7429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstatic void
7439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_Mutable_RandomAccessIterator_requirement_violation(_RandAccIter __i)
7449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{
7459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _RandomAccessIterator_concept_specification<_RandAccIter>::
7469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _RandomAccessIterator_requirement_violation(__i);
7479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Refinement of mutable_BidirectionalIterator
7489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Mutable_BidirectionalIterator_concept_specification<_RandAccIter>::
7499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Mutable_BidirectionalIterator_requirement_violation(__i);
7509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename
7519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __value_type_type_definition_requirement_violation<_RandAccIter>
7529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        ::value_type
7539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    value_type;
7549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename
7559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __difference_type_type_definition_requirement_violation<_RandAccIter>
7569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        ::difference_type
7579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Dist;
7589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typename _Mutable_trait<value_type>::_Type* __tmp_ptr = 0;
7609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Valid Expressions
7619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STL_ERROR::__element_assignment_operator_requirement_violation(__i,
7629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                  __tmp_ptr, _Dist());
7639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
7649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
7659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_TYPEDEF_REQUIREMENT(__REQUIREMENT) \
7679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class Type> \
7689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct __##__REQUIREMENT##__typedef_requirement_violation { \
7699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename Type::__REQUIREMENT __REQUIREMENT; \
7709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
7719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TYPEDEF_REQUIREMENT(value_type);
7739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TYPEDEF_REQUIREMENT(difference_type);
7749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TYPEDEF_REQUIREMENT(size_type);
7759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TYPEDEF_REQUIREMENT(reference);
7769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TYPEDEF_REQUIREMENT(const_reference);
7779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TYPEDEF_REQUIREMENT(pointer);
7789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TYPEDEF_REQUIREMENT(const_pointer);
7799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Alloc>
7829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _Allocator_concept_specification {
7839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstatic void
7849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_Allocator_requirement_violation(_Alloc __a) {
7859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Refinement of DefaultConstructible
7869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _DefaultConstructible_concept_specification<_Alloc>::
7879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _DefaultConstructible_requirement_violation(__a);
7889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Refinement of EqualityComparable
7899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _EqualityComparable_concept_specification<_Alloc>::
7909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _EqualityComparable_requirement_violation(__a);
7919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Associated Types
7929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __value_type__typedef_requirement_violation<_Alloc>();
7939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __difference_type__typedef_requirement_violation<_Alloc>();
7949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __size_type__typedef_requirement_violation<_Alloc>();
7959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __reference__typedef_requirement_violation<_Alloc>();
7969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __const_reference__typedef_requirement_violation<_Alloc>();
7979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __pointer__typedef_requirement_violation<_Alloc>();
7989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __const_pointer__typedef_requirement_violation<_Alloc>();
7999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Alloc::value_type _Type;
8009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_REQUIRES_SAME_TYPE(typename _Alloc::rebind<_Type>::other, _Alloc);
8019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
8029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
8039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
8049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_USE_CONCEPT_CHECKS */
8059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
8069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* __CONCEPT_CHECKS_H */
8079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
8089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables:
8099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++
8109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End:
811