https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89237
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |rejects-valid Status|UNCONFIRMED |NEW Last reconfirmed| |2019-02-07 CC| |msebor at gcc dot gnu.org Ever confirmed|0 |1 Known to fail| |6.4.0, 7.3.0, 8.2.0, 9.0 --- Comment #1 from Martin Sebor <msebor at gcc dot gnu.org> --- Confirmed with the test case below (please be sure to include the compiler output). Not a regression. Clang rejects it with the same error in C++ 98 mode so I wonder if the GCC error is because of some yet-to-be implemented language change. $ cat pr89237.C && /build/gcc-svn/gcc/xgcc -B /build/gcc-svn/gcc -S -Wall pr89237.C template <bool B, typename T = void> struct enable_if {}; template <typename T> struct enable_if<true, T> { typedef T type; }; template <typename T, typename = void> struct S; template <typename T> struct S<T, typename enable_if<sizeof(T)>::type> {}; template <typename T> struct S<T *> {}; int main() { S<int *> s; } pr89237.C: In function ‘int main()’: pr89237.C:8:23: error: ambiguous template instantiation for ‘struct S<int*>’ 8 | int main() { S<int *> s; } | ^ pr89237.C:5:30: note: candidates are: ‘template<class T> struct S<T, typename enable_if<(sizeof (T) != 0)>::type> [with T = int*]’ 5 | template <typename T> struct S<T, typename enable_if<sizeof(T)>::type> {}; | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ pr89237.C:6:30: note: ‘template<class T> struct S<T*> [with T = int]’ 6 | template <typename T> struct S<T *> {}; | ^~~~~~ pr89237.C:8:23: error: aggregate ‘S<int*> s’ has incomplete type and cannot be defined 8 | int main() { S<int *> s; } | ^