https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96106
Bug ID: 96106 Summary: A friend abbreviated template function denies access to private members Product: gcc Version: 10.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: kirshamir at gmail dot com Target Milestone: --- template<typename T> class number { T num; public: number(T num = 0): num(num) {} friend auto add(auto a, auto b); }; auto add(auto a, auto b) { // unjustified compilation error on the line below return number{a}.num + number{b}.num; } int main() { auto result = add(1.0, 2.0); } Compilation error provided by gcc (version 10.1 with -std=c++20): In instantiation of 'auto add(auto:13, auto:14) [with auto:13 = double; auto:14 = double]': error: 'double number<double>::num' is private within this context return number{a}.num + number{b}.num; See also: https://stackoverflow.com/questions/62779488/a-friend-abbreviated-template-function-clang-and-gcc-differ