История происхождения [temp.spec] / 6? - PullRequest
0 голосов
/ 14 января 2019

[temp.spec] / 6 читает:

Обычные правила проверки доступа не применяются к именам в объявлении явной реализации или явной специализации, за исключением имен, появляющихся в теле функции, аргумент по умолчанию, базовое предложение, спецификация члена, список-перечислитель, или статический член данных или переменный инициализатор шаблона. [Примечание: В частности, аргументы и имена шаблонов, используемые в деклараторе функции (включая типы параметров, типы возвращаемых данных и спецификации исключений), могут быть закрытыми типами или объектами, которые обычно недоступны. - конец примечания]

Какова была мотивация этого правила? Какое предложение внесло его (или оно древнее?) И для чего?

1 Ответ

0 голосов
/ 14 января 2019

Эта формулировка была добавлена ​​к решению проблемы 6.40 из N0841 (с 1996 года):

6.40 Разъяснение регистрации доступа в явных директивах создания экземпляров.

Эта проблема и ее решение взяты из публикации рефлектора Билла Гиббона c ++ std-ext-3258.
Статус: Открыто
Билл Гиббонс поднял вопрос о том, что невозможно явно создавать экземпляры шаблонов, в которых аргументы шаблона или другие компоненты явных ссылочных типов директив создания экземпляров недоступны.

namespace N {
  template <class T> void f(T);
}
namespace M {
  class A {
    class B {};
    void f() {
      B b;
      N::f(b);
    }
  };
}
template void N::f(M::A::B); // should be allowed

Вопрос предлагает формулировку

Обычные правила проверки доступа не применяются к явным экземплярам. Особенно, аргументы шаблона и имена, используемые в деклараторе функции (например, включая типы параметров, возвращаемые типы и спецификации исключений) могут быть частными типами или объекты, которые обычно не были бы доступны, и шаблон может быть членом шаблон или функция-член, которые обычно не были бы доступны.

Который затем был принят как часть N0892 , и это правило с C ++ 98.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...