挿入されたクラス名についてC++標準で読んだことは、(私が見ているように)サンプルプログラムの動作と矛盾しています。これが私が読んだものです:
3.4から(パラグラフ3)
クラスの注入されたクラス名(第9節)も、名前の非表示と検索の目的で、そのクラスのメンバーであると見なされます。
9から(段落2)
クラス名は、クラス名が表示された直後に宣言されているスコープに挿入されます。クラス名は、クラス自体のスコープにも挿入されます。これは、注入されたクラス名として知られています。アクセスチェックの目的で、注入されたクラス名は、パブリックメンバー名であるかのように扱われます。
これらのことから、以下は整形式の翻訳単位であり、正常にコンパイルされることがわかります。
#include <vector>
class X: std::vector<int>
{
vector mem;
};
ただし、次の場合はエラーが発生するはずですが、そうではありません。
#include <vector>
class X: std::vector<int>, std::vector<char>
{
vector mem; //compiles OK... mem is apparently std::vector<int>
};
名前は両方にvector
挿入され、パブリックメンバー名のように挿入されるため、Xに継承される必要があります。したがって、の名前はあいまいである必要があります。私は何かが足りないのですか?std::vector<int>
std::vector<char>
vector
X
PS私はMSVC9.0を使用しています