работает отлично.

ющий код компилируется в Clang, но не в GCC:

template<typename T>
struct Widget
{
    template<typename U>
    void foo(U)
    {
    }

    template<>
    void foo(int*)
    {
    }
};

Согласно стандарту C ++ ([temp.expl.spec], пункт 2):

Явная специализация может быть объявлена ​​в любой области, в которой может быть определен соответствующий первичный шаблон

Это ошибка в GCC, и если да, то как я могу найти ее в трекере ошибок?

Это вывод GCC:

prog.cc:13:14: error: explicit specialization in non-namespace scope 'struct Widget<T>'
     template<>
              ^

Я использую GCC HEAD 8.0.1, с-std=c++2a.

Ответы на вопрос(1)

Ваш ответ на вопрос