https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117269
Bug ID: 117269
Summary: Lambda with capture is accepted as NTTP
Product: gcc
Version: 14.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: ddvamp007 at gmail dot com
Target Milestone: ---
gcc compiles this code, clang rejects it
#include <iostream>
#include <type_traits>
consteval auto Make(int x) {
return [x]{ return x; };
}
using Closure = decltype(Make(0));
template <Closure lambda>
struct S {};
S<Make(0)> s0;
S<Make(1)> s1;
int main() {
std::cout << std::is_same_v<decltype(s0), decltype(s1)>; // 0
}
Note: 'Closure' parameter can be replaced by simply auto