Можно ли объявить шаблон функций как друга без форвардного объявления в 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

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