Эта формулировка была добавлена к решению проблемы 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.