/*
 * Copyright (c) 1999
 * Boris Fomitchev
 *
 * This material is provided "as is", with absolutely no warranty expressed
 * or implied. Any use is at your own risk.
 *
 * Permission to use or copy this software for any purpose is hereby granted
 * without fee, provided the above notices are retained on all copies.
 * Permission to modify the code and to distribute modified code is granted,
 * provided the above notices are retained, and a notice that the code was
 * modified is included with the above copyright notice.
 *
 */

#ifndef _STLP_OUTERMOST_HEADER_ID
#  define _STLP_OUTERMOST_HEADER_ID 0x103
#  include <stl/_prolog.h>
#elif (_STLP_OUTERMOST_HEADER_ID == 0x103) && ! defined (_STLP_DONT_POP_HEADER_ID)
#   define _STLP_DONT_POP_HEADER_ID
#endif

#if !defined (_STLP_WCE_EVC3)
#  if defined (_STLP_USE_NEW_C_HEADERS)
#    if defined (_STLP_HAS_INCLUDE_NEXT)
#      include_next <cassert>
#    else
#      include _STLP_NATIVE_CPP_C_HEADER(cassert)
#    endif
#  else
#    include <assert.h>
#  endif
#endif

#if (_STLP_OUTERMOST_HEADER_ID == 0x103 )
#  if !defined (_STLP_DONT_POP_HEADER_ID)
#    include <stl/_epilog.h>
#    undef _STLP_OUTERMOST_HEADER_ID
#  else
#    undef _STLP_DONT_POP_HEADER_ID
#  endif
#endif

// Local Variables:
// mode:C++
// End:
