https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77575
Bug ID: 77575 Summary: Bogus error when alias template yielding a reference type used as template template argument Product: gcc Version: 7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: rs2740 at gmail dot com Target Milestone: --- Reduced from http://stackoverflow.com/q/39460120/2756719: template<template <class> class> struct meow {}; template<class T> using kitty = T&; meow<kitty> u; results in the following bogus error: prog.cc: In instantiation of 'struct meow<kitty>': prog.cc:4:13: required from here prog.cc:1:46: error: type/value mismatch at argument 1 in template parameter list for 'template<template<class> class<template-parameter-1-1> > struct meow' template<template <class> class> struct meow {}; ^ prog.cc:1:46: note: expected a class template, got 'kitty' prog.cc:1:46: error: type/value mismatch at argument 1 in template parameter list for 'meow< <template-parameter-1-1> >::meow' prog.cc:1:46: note: expected a class template, got 'kitty' It compiles fine if 'kitty' is instead defined as T or T*.