http://gcc.gnu.org/bugzilla/show_bug.cgi?id=61080
--- Comment #5 from Paolo Carlini <paolo.carlini at oracle dot com> --- Thanks. Thus should we go back to the pre-r210043 behavior and somehow handle the case in instantiate_decl under the early: if (/* If there is no definition, we cannot instantiate the template. */ ! pattern_defined /* If it's OK to postpone instantiation, do so. */ || defer_ok /* If this is a static data member that will be defined elsewhere, we don't want to instantiate the entire data member, but we do want to instantiate the initializer so that we can substitute that elsewhere. */ || (external_p && VAR_P (d))) { /* .... */ which does very few checks and then soon does goto out? The problem with setting pattern_defined is that this entire early handling is skipped, not just its inner permerror for explicit instantiations when no definition is available. And by now we now that early handling otherwise works pretty well...