Неопределенное имя внедренного класса не является ошибкой

То, что я прочитал в стандарте C ++ о введенных именах классов, противоречит (как я это вижу) поведению примера программы, которую я представлю в ближайшее время. Вот что я прочитал:

  • Из 3.4 (параграф 3)

    Введенное-имя-класса класса (пункт 9) также считается член этого класса для целей сокрытия имени и поиска.

  • Из 9 (параграф 2)

    Имя класса вставляется в область, в которой оно объявлено сразу после появления имени класса. Имя класса также вставлен в область видимости самого класса; это известно как введенное-имя-класса. Для проверки доступа injected-class-name обрабатывается так, как если бы это было публичное имя члена.

Из них я понимаю, что следующая единица перевода является правильно сформированной и компилируется успешно.

#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 вводится в оба std :: vector и ] std :: vector , как если бы имя открытого члена, то оно должно быть унаследовано X, и поэтому имя vector в X должно быть неоднозначным. Я что-то упускаю?

P.S. Я использую MSVC9.0

19
задан Armen Tsirunyan 11 August 2011 в 11:28
поделиться