Typename в квалифицированном доступе к участникуC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Typename в квалифицированном доступе к участнику

Сообщение Anonymous »

Интересно, должен ли этот фрагмент кода компилировать и какую функцию он должен вызывать. Ситуация в том, что существует структура , чье имя соответствует имени параметра шаблона. Мой вопрос: внутри определения специализации f (где u происходит из t ), означает ли t параметр шаблона или базовый класс?

Код: Выделить всё

template
void f(T t) {
t.T::~T(); // #1 should this compile?
t.T::m(); // #2 should this compile?
}

struct T { ~T() {} void m(){}}; // note named like the typename parameter
struct U : private T { ~U() {} void m(){}}; // note inherits from T

int main()
{
f(U{});
}
Ну, от наивного взгляда, он должен составить #1 и #2, и найти u :: m () , и вызвать деструктор u ;
Но я попробовал его на компиляторах, используя Godbolt https://godbolt.org/z/3kg8m5xv и поведен. Мысль. :: u :: m () Нет ошибок компилятора, которые соответствуют моим ожиданиям.
MSVC повышает ошибки на обеих строках, говоря, что он не может получить доступ к частной базе :: t Destructor и Private Member Function :: t :: f () .
, какой комбинированный комбинированный :: f () .
, какой комполированный композит или это поведение? пытался прочитать стандарт, чтобы определить ответ, но я не понимаю.

Подробнее здесь: https://stackoverflow.com/questions/797 ... ber-access
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»