blob: 09e85afb5b5d4e7aed96de5e0efb386963080770 [file] [log] [blame]
/**************************************************************************
*
* exceptn.cpp - Illustrate the use of Standard exceptions.
*
* $Id: //stdlib/dev/examples/stdlib/tutorial/exceptn.cpp#11 $
*
***************************************************************************
*
* Copyright (c) 1994-2005 Quovadx, Inc., acting through its Rogue Wave
* Software division. Licensed 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.
*
**************************************************************************/
#include <string> // for string
#include <stdexcept> // for exception, runtime_error, out_of_range
#include <iostream> // for cout
#include <examples.h>
#ifndef _RWSTD_NO_EXCEPTIONS
int main () {
// First we'll incite and catch an exception from the C++ Standard
// library class std::string by attempting to replace a substring
// starting at a position beyond the end of the string object.
try {
std::string ().replace (100, 1, 1, 'c');
}
catch (std::out_of_range &e) {
// Print out the exception string, which in this implementation
// includes the location and the name of the function that threw
// the exception along with the reason for the exception.
std::cout << "Caught an out_of_range exception: "
<< e.what () << '\n';
}
catch (std::exception &e) {
std::cout << "Caught an exception of an unexpected type: "
<< e.what () << '\n';
}
catch (...) {
std::cout << "Caught an unknown exception\n";
}
// Throw another exception.
try {
throw std::runtime_error ("a runtime error");
}
catch (std::runtime_error &e) {
std::cout << "Caught a runtime_error exception: "
<< e.what () << '\n';
}
catch (std::exception &e) {
std::cout << "Caught an exception of an unexpected type: "
<< e.what () << '\n';
}
catch (...) {
std::cout << "Caught an unknown exception\n";
}
return 0;
}
#else // if defined (_RWSTD_NO_EXCEPTIONS)
int main () {
std::cout << "Exception support disabled.\n";
return 0;
}
#endif // _RWSTD_NO_EXCEPTIONS