У меня есть класс с функцией друга, определенной в заголовке класса.Когда я делаю объявление об использовании этой функции-друга, она работает в MSVC2017, но ни в GCC 8.2, ни в Clang 7.0.Кто прав?Вот ссылка на Godbolt (https://godbolt.org/z/_7MVlh),, а вот код:
namespace vec {
class Vec {
friend Vec vec_max(const Vec& a, const Vec& b) { return a; }
};
}
void test() {
using vec::vec_max;
}
GCC выдает ошибку при объявлении использования: "error: нет члена с именем 'vec_max' в пространстве имен 'vec'". Clang дал похожее сообщение. MSVC скомпилировал его, как и предполагалось.
Насколько я понимаю, vec_max должен находиться в пространстве имен vec, а MSVC должен быть корректным. Но в стандарте могут быть некоторые тонкие записи, которые делаютболее ограниченная интерпретация gcc и clang правильная (хотя и менее интуитивная).