https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92078
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2019-10-12 Ever confirmed|0 |1 --- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- This is not a redeclaration, it's a specialization. And it doesn't have different access to the other specialization anyway. Reduced: template<typename I> struct iterator_traits { private: template<typename Iter> struct ptr { }; template<typename J> requires requires { typename J::X; } struct ptr<J> { }; template<typename J> requires (!requires { typename J::X; } && requires { typename J::Y; }) struct ptr<J> { }; }; access.cc:17:7: error: ‘struct ptr<J>’ redeclared with different access 17 | struct ptr<J> | ^~~~~~