Есть ли способ использовать using
для частного вложенного класса ClassImpl
?
Краткий ответ - "нет".
Более длинный ответ следует.
То, что вы пытаетесь сделать, - это объявление using
, а не директива using
.
Ваше объявление об использовании
using C = Class::ClassImpl;
находится в области видимости файла, поэтому имя Class::ClassImpl
нельзя использовать непосредственно в качестве имени в этой области.
Первым соответствующим разделом стандарта (C ++ 17) является Раздел 10.3.3 «Объявление using
», в котором пункт 19 гласит «Синоним, созданный using-декларацией , имеет обычная доступность для декларации члена".
Чтобы узнать, что подразумевается под «обычной доступностью», обратитесь к Разделу 14 «Контроль доступа членов», в котором говорится, что «private
имена могут использоваться только членами и друзьями класса, в котором оно объявлено». Использование «имён» здесь довольно специфично - все с именем, равным private
для класса (объявления членов, объявления типов и т. Д.), Обрабатывается одинаково.
Если вы хотите иметь using
объявление в области видимости файла, как в вашем примере;
using C = Class::ClassImpl;
тогда ClassImpl
должно быть public
именем (вложенного класса) Class
. private
и protected
имена классов недоступны в области видимости файла.