stringクラス?

C++にstringクラスなんてない。

std名前空間の中にもない。つまりstd::stringクラスもない。でもC++で以下のようなコードはコンパイルできるし、もちろん実行もできる。

#include <string>
#include <iostream>

int main() {
    std::string str = "hoge";
    std::cout << str << std::endl;
}

これを見るとstd::stringクラスが存在するように見える。でもこのstd::stringはクラスではなく、一般的にbasic_string<char>のtypedefでしかない。つまり、std名前空間内で

typedef basic_string<char> string;

のようになっている。

ただ、この結果からstd::stringのことをstd::basic_string<char>と呼ぶのはやりすぎな気もするし、std::string typedefってのもしっくりこない。やっぱりstringクラスと呼びたいし、明らかにstd::stringのことをさしているならstringクラスと呼んでもいいような気がする。

どうしたもんだろう?