template<template<typename...> class T> struct X { }; template<template<typename> class T> struct X<T> { }; template<typename T> struct Y { }; X<Y> x; The partial specialization is ill-formed, 14.5.5 [temp.class.spec] p8 says Within the argument list of a class template partial specialization, the following restrictions apply: - [...] - [...] - The argument list of the specialization shall not be identical to the implicit argument list of the primary template. The implicit argument list of the primary template is T, which is identical to that of the partial specialization. Clang and MSVC reject it.
Confirmed.