g++ и clang++ разное поведение со специализацией шаблона для значения шаблона `sizeof()`

Очередной "кто прав между g++ и clang++?" вопрос к стандартным гуру.

Учитывая следующий тривиальный код

#include <utility>

template <std::size_t N, typename = std::make_index_sequence<N>>
struct foo;

template <std::size_t...Is>
struct foo<sizeof...(Is), std::index_sequence<Is...>>
 { };

int main ()
 {
    foo<3u> f;

    (void)f; // just to avoid the "unused variable" warning
 }

У меня этот clang++ компилируется без проблем (clang++ 9.0.0, например, но и более старые версии), где g++ (g++ 9.2.0, например, но также и более старые версии) дает мне следующую ошибку компиляции

 prog.cc:8:8: error: template argument 'sizeof... (Is)' involves template parameter(s)
     8 | struct foo<sizeof...(Is), std::index_sequence<Is...>>
       |        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Как всегда вопрос: кто прав?

Или, другими словами: правильный ли мой пример кода?

-- ИЗМЕНИТЬ--

Что касается другого вопроса, я полагаю, что это связано, но я не думаю, что это точная копия.

На самом деле clang++ не компилирует код в этом вопросе, скомпилируйте этот код.

В противном случае ошибка g++ такая же, и, если я правильно понимаю, принятый ответ на этот вопрос может быть ответом и на этот вопрос.

После этого ответа, если я правильно понимаю, код неверен до cwg 1315, потому что «частично специализированное выражение аргумента нетипа» (sizeof...(Is)) включает «параметр шаблона частичной специализации», который не является «простым идентификатором».

После cwg 1315 -- опять же, если я правильно понимаю -- код должен быть правильным, потому что "Каждый параметр-шаблон" появляется один раз "вне невыведенного контекста".


person max66    schedule 26.10.2019    source источник
comment
Возможный дубликат Частичная специализация шаблона с нетиповыми параметрами: GCC против MSVS   -  person Language Lawyer    schedule 26.10.2019
comment
@LanguageLawyer — интересно; Я не думаю, что это точная копия (clang++ не компилирует код этого вопроса, а компилирует код этого), но мне кажется, что ответ на этот вопрос может быть ответом (или полезным для написания ответа) также для этого. Вопрос отредактирован. Что вы думаете?   -  person max66    schedule 26.10.2019
comment
Похоже на ошибку в gcc, например gcc.gnu.org/bugzilla/show_bug.cgi ?id=67593   -  person Language Lawyer    schedule 26.10.2019