https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96416
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- I think this is the "correct" behaviour. The specification of pointer_traits<Ptr>::element_type says that if Ptr::element_type isn't valid, and Ptr isn't a template that can be "rebound", then "otherwise, the specialization is ill-formed." This explicitly says "the specialization" (meaning pointer_traits<Ptr> itself). Compare this with th rebind member which only says "the instantiation of rebind is ill-formed".