Ошибка gcc? скрытие имени и специализация для шаблона класса с тем же именем в производном классе, но только тогда, когдC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка gcc? скрытие имени и специализация для шаблона класса с тем же именем в производном классе, но только тогда, когд

Сообщение Anonymous »

Является ли сообщение об ошибке, показанное ниже, ошибкой gcc 13.1.0? Этот код отлично компилируется в clang 18.0.2 и MSVC 19.41. Этот код даже нормально компилируется в gcc, если вы измените s0 на нешаблонный класс. Есть что-то особенное в том, что s0 является шаблонным классом, что расстраивает gcc.
Цель состоит в том, чтобы производный класс s1 имел свой собственный шаблон класса foo< /code>, который полностью скрывает любой foo из s0. А затем, после объявления foo, s1 также хочет указать, что s1::foo является другом s1. Похоже, что gcc интерпретирует первую строку s1 как частичную специализацию s0::foo, но опять же (как ни странно) только если s0 является шаблоном class.

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

template< class X >
struct s0
{
template< class T >
struct foo;
};
struct s1 : public s0
{
// - this should be an entirely new class template "foo"
// - hiding the "foo" in s0
// [basic.scope.hiding]
//
template< class T >
struct foo;

// - gcc error is:
// partial specialization 's0::foo' declared 'friend'
// (gcc thinks the line above is a partial specialization??)
//
template< class T >
friend
struct foo;
};
Если это ошибка, есть идеи, как ее обойти?


Подробнее здесь: https://stackoverflow.com/questions/791 ... ame-in-der
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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