Внутри шаблона можно иметь доступ к приватным членам внутреннего класса, потому что шаблоны в С++ рассматриваются компилятором как шаблоны кода, и они не генерируются и не компилируются до тех пор, пока не происходит фактическое использование шаблона с конкретными типами.
Когда компилятор сталкивается с использованием шаблона функции или класса с конкретными типами, он генерирует код для такого использования и выполняет весь обычный процесс проверки синтаксиса и доступа к членам, который связан с этим кодом.
Это означает, что доступ к приватным членам внутреннего класса внутри шаблона является возможным, потому что компилятор или линкер не проверяют доступ к приватным членам до момента конкретного использования шаблона с конкретными типами.
Однако, не стоит считать, что шаблоны не учитывают модификаторы доступа вообще. Если сгенерированный код внутри шаблона попытается обратиться к приватным членам внутреннего класса через экземпляр этого класса, который передается шаблону как аргумент, то такой код будет вызывать ошибку компиляции. Это связано с тем, что модификаторы доступа не проверяются во время объявления шаблона, но проверяются при использовании шаблона с конкретными типами.
Таким образом, в целом, доступ к приватным членам внутреннего класса внутри шаблона является возможным, но только при определенных условиях, и такой доступ ограничивается временем компиляции.