https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86946
Jason Merrill <jason at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED CC| |jason at gcc dot gnu.org Assignee|unassigned at gcc dot gnu.org |jason at gcc dot gnu.org --- Comment #6 from Jason Merrill <jason at gcc dot gnu.org> --- Well-formed version of the testcase, that has never worked: template <typename a, typename c> constexpr int d(a, c) { return 42; } template <long> class e {}; template <unsigned long f, unsigned b, typename> e<d(f, b)> d(); template <unsigned long f, unsigned b, typename> e<d(f, b)> d(); int main() { d<1,2,int>(); } With checking disabled, the two declarations are treated as ambiguous; with checking enabled, we do structural comparison and find the internal inconsistency, and so ICE. What is the testcase from capnproto?