http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57684
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- I think the problem is that unordered_map requires its template arguments to be complete at the time of instantiation, otherwise it's undefined behaviour. When the static member is instantiated the type Derived is not complete, because base<derived> is instantiated before the body of derived. So although it would be nice if this worked, I think it technically relies on undefined behaviour.