This got fixed by r266055 but we didn't have a test like this. Tested on x86_64-linux, applying to trunk.
2019-06-20 Marek Polacek <pola...@redhat.com> PR c++/87512 * g++.dg/cpp1z/inline-var7.C: New test. diff --git gcc/testsuite/g++.dg/cpp1z/inline-var7.C gcc/testsuite/g++.dg/cpp1z/inline-var7.C new file mode 100644 index 00000000000..71fa1d3b7da --- /dev/null +++ gcc/testsuite/g++.dg/cpp1z/inline-var7.C @@ -0,0 +1,20 @@ +// PR c++/87512 +// { dg-do compile { target c++17 } } + +template <int, typename T = int> using enable_if_t = int; +template<typename T> struct is_pointer { enum { value = 0 }; }; + +template <typename T> +inline constexpr auto IsPtr = is_pointer<T>::value; + +class Foo; +class Bar; + +template <typename T1, typename T2> +void foo(T1, T2); + +template <typename T> +enable_if_t<IsPtr<T>> foo(T, Foo); + +template <> +void foo<Bar>(Bar, Bar);