https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121636
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I am not saying this is correct but GCC is acting like the following code: ``` typedef double T; template<int N> void f(const T(&arr)[N], int asdf = 468) { __builtin_printf("f<N>()\n"); } void f(const T* arr, int n, int asdf = 0) { __builtin_printf("f(ptr,n,asdf)\n"); } template<int N> void g(const double(&arr)[N], int asdf = 468) { f(arr, asdf); } int main() { double x[] = {1.0, 2.0, 3.0}; f(x); g(x); return 0; } ``` While clang is acting for the inherited constructor if g was defined like: ``` template<int N> void g(const double(&arr)[N], int asdf = 468) { f<N>(arr, asdf); } ``` I have no idea which is correct.