https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68089
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- The error seems correct to me, the function is only a friend of its first argument, not its second. Friendship is not transitive, just because the function friends with C<T> and C<T> is friends with C<U> that does not mean the function is friends with C<U>.