https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87844
Bug ID: 87844 Summary: ICE in tsubst_copy using non-constant expression as a non-type template argument Product: gcc Version: 8.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: curlypaul924 at gmail dot com Target Milestone: --- The following code causes ICE in every version I tried from 4.9.0 through 8.2, as well as trunk: struct C { static constexpr bool call(bool) { return true; } }; template<bool b> struct B {}; auto foo(bool b) { auto f = [](auto c) -> B<decltype(c)::call(b)> { }; f(C()); } int main() { foo(true); } Compile with either -std=c++14 or -std=c++17. Clang (I believe correctly) rejects this code with "non-type template argument is not a constant expression".