Можно ли объявить шаблон функций как друга без форвардного объявления в C ++ 20?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Можно ли объявить шаблон функций как друга без форвардного объявления в C ++ 20?

Сообщение Anonymous »

Я хотел бы написать шаблон класса с шаблоном функции друга. Если я напишу < /p>

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

template 
class A {
friend void f(A&);
int i = 0;
};

template 
void f(A& a) {
a.i = 1;
}
< /code>
Затем в режиме C ++ 17 все компиляторы отклоняют программу. Но в режиме C ++ 20, GCC и MSVC начинают его принимать. f 
и поэтому шаблон класса A до его определения. Онлайн демонстрация: https://gcc.godbolt.org/z/j7kb97vks
Какая реализация здесь правильная?

Подробнее здесь: https://stackoverflow.com/questions/796 ... ion-in-c20
Ответить

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

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

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

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

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