https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66962
--- Comment #13 from Andrew Sutton <andrew.n.sutton at gmail dot com> --- There are a couple of other problems in the minimized example (concept int shows up a couple of times, there's a variable template whose initializer is a requires expression). I doubt those contribute to the observed problem. I suspect there's something else at work. There was a performance problem related earlier this year where (either) normalization or decomposition was being applied for each subexpression multiple times. The total number of elements in a decomposition should be linear w.r.t. to the number of disjunctions. I'll try to look through this tomorrow. A possible optimization is to store specializations of each concept being normalized, so we don't expand to the same expressions over and over again -- basically, helping to ensure that we don't have lots of duplicate cases that we're proving over and over again. It would probably be a good idea to prove that's logically sound before implementing :/