blob: 5ae99707630812e0ef180ffedec03b4816d3fc6a [file] [log] [blame]
// -*- C++ -*-
/***************************************************************************
*
* exception - declarations for the Standard Library exception class
*
* $Id$
*
***************************************************************************
*
* 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 _RWSTD_EXCEPTION_INCLUDED
#define _RWSTD_EXCEPTION_INCLUDED
#include <rw/_defs.h>
#include <rw/_error.h>
#if 0 // def __HP_aCC
// HP aCC on HP-UX has <exception.h> whose contents HP prefers to ours
// # include </opt/aCC/include/exception.h>
# include <exception.h>
#else // if defined (__HP_aCC)
#if !defined (_RWSTD_NO_STD_EXCEPTION) \
|| !defined (_RWSTD_NO_RUNTIME_IN_STD)
_RWSTD_NAMESPACE (std) {
#endif // _RWSTD_NO_STD_EXCEPTION || !_RWSTD_NO_RUNTIME_IN_STD
// 18.6.1
class _RWSTD_EXPORT exception
{
public:
// 18.6.1, p2
exception () _THROWS (());
// 18.6.1, p4
exception (const exception&) _THROWS (());
// 18.6.1, p4
exception& operator= (const exception&) _THROWS (());
// 18.6.1, p6
virtual ~exception () _THROWS (());
// 18.6.1, p8
virtual const char* what () const _THROWS (());
#if defined (__INTEL_COMPILER) && !defined (_MSC_VER)
private:
const char *_C_name;
#elif defined (_MSC_VER)
private:
const char *_C_name;
int _C_flag;
#endif // _MSC_VER
};
#if !defined (_RWSTD_NO_STD_EXCEPTION) \
|| !defined (_RWSTD_NO_RUNTIME_IN_STD)
} // namespace std
#else // if _RWSTD_NO_STD_EXCEPTION && _RWSTD_NO_RUNTIME_IN_STD
# ifndef _RWSTD_NO_NAMESPACE
namespace std {
using ::exception;
} // namespace std
# endif // _RWSTD_NO_NAMESPACE
#endif // _RWSTD_NO_STD_EXCEPTION, _RWSTD_NO_RUNTIME_IN_STD
#if !defined (_RWSTD_NO_STD_BAD_EXCEPTION) \
|| !defined (_RWSTD_NO_RUNTIME_IN_STD)
_RWSTD_NAMESPACE (std) {
#endif // _RWSTD_NO_STD_BAD_EXCEPTION || _RWSTD_NO_RUNTIME_IN_STD
// 18.6.2.1
class _RWSTD_EXPORT bad_exception: public _STD::exception
{
public:
// 18.6.2.1, p2
bad_exception () _THROWS (());
// 18.6.2.1, p4
bad_exception (const bad_exception&) _THROWS (());
// 18.6.2.1, p4
bad_exception& operator= (const bad_exception&) _THROWS (());
virtual ~bad_exception () _THROWS (());
// 18.6.2.1, p5
virtual const char* what () const _THROWS (());
};
#if !defined (_RWSTD_NO_STD_BAD_EXCEPTION) \
|| !defined (_RWSTD_NO_RUNTIME_IN_STD)
} // namespace std
#else // if _RWSTD_NO_STD_BAD_EXCEPTION && _RWSTD_NO_RUNTIME_IN_STD
# ifndef _RWSTD_NO_NAMESPACE
namespace std {
using ::bad_exception;
} // namespace std
# endif // _RWSTD_NO_NAMESPACE
#endif // _RWSTD_NO_STD_BAD_EXCEPTION, _RWSTD_NO_RUNTIME_IN_STD
_RWSTD_NAMESPACE (std) {
// 18.6.2.2
typedef void (*unexpected_handler) ();
// 18.6.2.3
_RWSTD_EXPORT extern unexpected_handler
set_unexpected (unexpected_handler) _THROWS (());
// 18.6.2.4
_RWSTD_EXPORT extern void
unexpected () _RWSTD_GNUC_ATTRIBUTE ((__noreturn__));
// 18.6.3.1
typedef void (*terminate_handler) ();
// 18.6.3.2
_RWSTD_EXPORT extern terminate_handler
set_terminate (terminate_handler) _THROWS (());
// 18.6.3.3
_RWSTD_EXPORT extern void
terminate () _RWSTD_GNUC_ATTRIBUTE ((__noreturn__));
// 18.6.4
_RWSTD_EXPORT extern bool
uncaught_exception () _THROWS (());
} // namespace std
#endif // __HP_aCC
#endif // _RWSTD_EXCEPTION_INCLUDED