https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110809
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I reduced it to an invalid code (I don't know if the original was valid or not): ``` template <double> struct S {}; template <typename Hash, int i> struct bucket {}; template <typename Hash, int i> int find_indices_impl(bucket<Hash, i> const &); using HashTable = bucket<S<2.0>, 1>; auto t = find_indices_impl<S<1.0>>(HashTable{}); ``` If I remove the i template argument, GCC correctly rejects the above. If I change 1.0 and 2.0 to the same value, GCC accepts the code correctly. Note clang does not support double as a non-type template argument (yet).