c++ catch异常处理问题

catch vector越界时throw的out_of_range时必须#include 的问题
我知道out_of_range是stdexcept中定义的一个类
但是,vector中没有关于这个类的声明的话,它是怎么抛出这个类的
/************** 上面有点没说清楚 **************/

查到vector中代码的时候发现它使用的是__throw_out_of_range_fmt()这个函数;
这个函数只在functexcept.h中找到了它的声明,定义被隐藏起来了?

 #include <iostream>

using namespace std;

int main()
{
    __throw_out_of_range("out_of_range");
    return 0;
}

这样写是能成功编译的,运行也会提示程序抛出了out_of_range
我这里并没有 #include <stdexcept>
也就是并没有声明过out_of_range这个类
却能够抛出它,所以混乱了
问题的关键就是 __throw_out_of_range这个函数的定义

C++异常类,继承自logic_error,logic_error的父类是exception。属于运行时错误,如果使用了一个超出有效范围的值,就会抛出此异常。也就是一般常说的越界访问。定义在命名空间std中。
使用时须包含头文件 stdexcept

 #include<iostream>
#include<stdexcept>
#include<vector>
using namespace std;//或者用其他方式包含using std::logic_error;和using std::out_of_range;
int main (void)
{
    vector<int> myvector(10);
    try
    {
        myvector.at(20)=100; // vector::at throws an out-of-range
    }
    catch (out_of_range& oor)
    {
        cerr << "Out of Range error: " << oor.what() << endl;
    }
    getchar();
    return 0;
}

http://blog.csdn.net/wangfengwf/article/details/11580817