https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87651
Bug ID: 87651 Summary: inner class with template template friend declaration of same name fails to compile in gcc 8.1, 8.2, and 9.0 Product: gcc Version: 8.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: haining.cpp at gmail dot com Target Milestone: --- Requirements to repro 1) Outer class must be template 2) Inner class must have template template parameter #### Sample program #### template <typename> class Cls; template <typename> struct Outer { template <template <typename> class> class Failure { template <template <typename> class> friend class Failure; // All Failures should be friends }; using F = Failure<Cls>; }; int main() { Outer<void>::F var; } #### Error message ##### prog.cc: In instantiation of 'class Outer<void>::Failure<Cls>': prog.cc:15:18: required from here prog.cc:5:33: error: template parameter 'template<class> template<class> class<template-parameter-2-1>' template <template <typename> class> ^~~~~ prog.cc:8:18: error: redeclared here as 'template<class> class<template-parameter-1-1>' friend class Failure; ^~~~~~~ #### Additional Info #### wandbox links to errors: - [gcc-8.1.0](https://wandbox.org/permlink/vpzvcXcPUwVm4ent) - [gcc-8.2.0](https://wandbox.org/permlink/YaD9sml3aPaJExcm) - [gcc HEAD 9.0.0 20181017 ](https://wandbox.org/permlink/FXqrijJRqbyNT0ZT) passing with [gcc-7.3.0](https://wandbox.org/permlink/0HQ9K8PuSJBqRmD1) This is causing several components of http://github.com/ryanhaining/cppitertools to fail to compile, and I have no ideas for a workaround besides making my data members public