GCC (trunk) behaves differently for the following code where the arguments of a template A can be deducible from a type. https://godbolt.org/z/3bxW8W9To ``` #include <array> template <int N> using A = std::array<int, N>; // Ensures a specialization of A is deduced, from https://eel.is/c++draft/over.match.class.deduct#6 template <class> class AA; template <int N> class AA<A<N>> {}; template <class T> concept deduces_A = requires { sizeof(AA<T>);} ; static_assert(deduces_A<std::array<int, 3>>); // fails on gcc, true on clang and msvc ```
IIUC this is CWG1647 / PR60679. It works if we give 'N' type std::size_t instead of so that there's no implicit integral conversion going on. *** This bug has been marked as a duplicate of bug 60679 ***