/***************************************************************************
 *
 * _exception.h - Declarations for the Standard Library exception class
 *
 * This is an internal header file used to implement the C++ Standard
 * Library. It should never be #included directly by a program.
 *
 * $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_RW_EXCEPTION_H_INCLUDED
#define _RWSTD_RW_EXCEPTION_H_INCLUDED


#include <exception>

#ifndef _RWSTD_RW_DEFS_H_INCLUDED
#  include <rw/_defs.h>
#endif   // _RWSTD_RW_DEFS_H_INCLUDED


_RWSTD_NAMESPACE (std) { 


// forward declarations avoid circular dependencies
template <class _CharT, class _Traits, class _Allocator>
class basic_string;

template <class _CharT>
struct char_traits;

template <class _TypeT>
class allocator;


typedef basic_string<char, char_traits<char>, allocator<char> > string;

}  // namespace std

_RWSTD_NAMESPACE (__rw) { 

// base exception class inherited by all other exceptions
class _RWSTD_EXPORT __rw_exception: public _STD::exception
{
public:

    __rw_exception () _THROWS (());

    __rw_exception (const __rw_exception&);

    _EXPLICIT __rw_exception (const _STD::string&);
    
    _EXPLICIT __rw_exception (const char*);

    virtual ~__rw_exception () _THROWS (());

    // empty exception specification necessary in order to preserve
    // the no-exception guarantee provided by std::exception to
    // derived classes (e.g., logic_error)
    __rw_exception& operator= (const __rw_exception&) _THROWS (());

    virtual const char* what () const _THROWS (());

    __rw_exception&
    _C_assign (const char*, _RWSTD_SIZE_T = _RWSTD_SIZE_MAX);

private:
    char *_C_what;   // description string
};


}   // namespace __rw


#endif   // _RWSTD_RW_EXCEPTION_H_INCLUDED
