https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93155
--- Comment #3 from Tobias Loew <tobias.loew at steag dot com> --- After reading the standard carefully, I figured out that this is not an error since the rewrite as function templates is ambiguous: template<class... T> struct mp_similar_impl {}; template<class T> void f(mp_similar_impl<T, T>) {} template<template<class...> class L, class... T1, class... T2> void f(mp_similar_impl<L<T1...>, L<T2...>>) {} int main() { f(mp_similar_impl<std::list<int>, std::list<int>>{}); // error ambiguous }