https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66686
Bug ID: 66686 Summary: Instantiation of dependent template template parameter with non-dependent template rejected Product: gcc Version: 5.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: ppalka at gcc dot gnu.org Target Milestone: --- The following code should probably compile: template <template <int> class> struct A { }; template <int> struct Y { }; template <class A, class B, template <template <B> class Z> class C> struct X { C<Y> a; }; X<int, int, A> a; With GCC 5.1 it does not: foo.cc:10:8: error: type/value mismatch at argument 1 in template parameter list for ‘template<template<B <anonymous> > class Z> class C’ C<Y> a; ^ foo.cc:10:8: error: expected a template of type ‘template<B <anonymous> > class Z’, got ‘template<int <anonymous> > struct Y’ Is this valid code in the first place?