/************************************************************************** * * examples.h - common definitions to condition example code for broken * compilers; must be #included last, _after_ all lib headers. * * The goal of this file is to allow completely conforming syntax * in examples' code even with non-conforming compilers. * * $Id: examples.h 550991 2007-06-26 23:58:07Z sebor $ * *************************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. * * Copyright 1994-2006 Rogue Wave Software. * **************************************************************************/ #ifndef EXAMPLES_H_INCLUDED #define EXAMPLES_H_INCLUDED #ifdef _RWSTD_NO_NAMESPACE # define std #endif // _RWSTD_NO_NAMESPACE #ifdef _RWSTD_NO_TYPENAME # define typename #endif // _RWSTD_NO_TYPENAME #ifdef _RWSTD_NO_FOR_LOCAL_SCOPE # define for if (0) ; else for #endif // _RWSTD_NO_FOR_LOCAL_SCOPE #include // for ptrdiff_t #ifdef _RWSTD_NO_LIBC_IN_STD _RWSTD_NAMESPACE (std) { // accomdate compilers that don't have size_t in namespace std _USING (::size_t); _USING (::ptrdiff_t); } // namespace std #endif // _RWSTD_NO_LIBC_IN_STD #ifdef _RWSTD_NO_CLASS_PARTIAL_SPEC // supply conforming versions of count, count_if and distance for platforms // that do not correctly support partial specialization of class templates _RWSTD_NAMESPACE (std) { template size_t count (InputIter a, InputIter b, const T& x) { size_t n = 0; count (a, b, x, n); return n; } template size_t count_if (InputIter a, InputIter b, const T& x) { size_t n = 0; count_if (a, b, x, n); return n; } template size_t distance (InputIter a, InputIter b) { size_t n = 0; distance (a, b, n); return n; } } // namespace std #endif // _RWSTD_NO_CLASS_PARTIAL_SPEC #ifdef _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE #if !defined (_MSC_VER) || _MSC_VER > 1300 _RWSTD_NAMESPACE (std) { #define has_facet fake_has_facet #define use_facet fake_use_facet // fake std::use_facet template struct has_facet { has_facet (const std::locale &loc) #ifndef _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE : result (std::has_facet(loc)) { } #else : result (std::has_facet (loc, (Facet*)0)) { } #endif // _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE operator bool () const { return result; } bool result; }; // fake std::use_facet template struct use_facet { use_facet (const std::locale &loc) : facet (std::_USE_FACET (Facet, loc)) { } operator const Facet& () const { return facet; } const Facet &facet; }; } // namespace std #else // if defined (_MSC_VER) && _MSC_VER <= 1300 # define _HAS_FACET(facet, locale) has_facet (locale, (facet*)0) #endif // !defined (_MSC_VER) || _MSC_VER > 1300 #endif // _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE #ifdef _RWSTD_NO_EXCEPTIONS # define try if (1) # define catch(ex) else if (0) for (ex ; 0 ; ) # define throw(ignore) abort () #endif // _RWSTD_NO_EXCEPTIONS #ifdef _RWSTD_NO_WCHAR_T // remove `L' from wide string literals #define L // fake wide stream objects #define wcin cin #define wcout cout #define wcerr cerr #define wclog clog // fake wide string and stringstream #define wstring string #define wstringstream stringstream #define wchar_t char #endif // _RWSTD_NO_WCHAR_T // undefine macros #defined by some evil C libraries (e.g., MSVC) #undef max #undef min #endif // EXAMPLES_H_INCLUDED