Следующее определяет функцию друга в глобальном пространстве имен, объявляет ту же функцию в качестве друга
class Cls {
friend void func(int) { }
friend void ::func(int);
};
clang принимает это, в то время как gcc отклоняет с
so.cpp:3:17: error: ‘void func(int)’ has not been declared within ‘::’
friend void ::func(int);
^~
so.cpp:2:17: note: only here as a ‘friend’
friend void func(int) { }
^~~~
Похоже, что это должно быть хорошо для меня, это определение функции в глобальном пространстве имен, не так ли? Ошибка gcc довольно очевидна: ей не нравится, когда only
дружит. Кто прав?