Еще один баг компилятора
C++ gcc HEAD 10.0.0 20190 относительно дружественных функций.
Следующая программа успешно компилируется с использованием компилятора
clang HEAD 10.0.0
#include <iostream>
template <class T>
void f( const T & );
class A
{
public:
A( int x = 0 ) : x( x ) {}
friend void ::f( const A & );
private:
int x;
};
template <class T>
void f( const T &t )
{
std::cout << "t.x = " << t.x << '\n';
}
int main()
{
A a( 10 );
f( a );
}
Вывод программы на консоль:
t.x = 10
Однако если использовать компилятор
C++ gcc HEAD 10.0.0 20190, то он выдает следующее сообщение об ошибке
prog.cc:11:32: error: 'void f(const A&)' should have been declared inside '::'
11 | friend void ::f( const A & );
| ^
Программа будет компилироваться компилятором
C++ gcc HEAD 10.0.0 20190, если объявить дружествунную функцию в классе A следующим образом
friend void ::f<>( const A & );
Однако согласно стандарту C++ это не требуется делать, так как указано квалифицированное имя дружественной функции.