https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108254
Bug ID: 108254
Summary: Usage of requires expression with an immedietely
invoked lambda expression results in compile error
instead of evaluating to false
Product: gcc
Version: 12.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: avr5309 at gmail dot com
Target Milestone: ---
Substitution failure of an immedietely invoked lambda expression within an
requires expression results in a compile error instead of the requires
expression evaluating to 'false' (by my understanding of
http://eel.is/c++draft/expr.prim.req#general-5 . Clang 15 comforms to my
expectation).
### SOURCE:
The single source file (bug.cpp):-
template <class T>
concept Container = requires(T t) {
{
[](T const& t){
for(auto&& v : t)
;
}(t)
};
};
int main() {
static_assert(!Container<int>);
}
### COMPILER INVOCATION:
g++ -fsyntax-only -std=c++20 -Wall -Wextra -pedantic-errors -xc++ -
### ACTUAL OUTPUT:
The following error message:-
bug.cpp: In lambda function:
bug.cpp:5:13: error: 'begin' was not declared in this scope
5 | for(auto&& v : t)
| ^~~
bug.cpp:5:13: error: 'end' was not declared in this scope
bug.cpp: In function 'int main()':
bug.cpp:12:19: error: static assertion failed
12 | static_assert(!Container<int>);
| ^~~~~~~~~~~~~~~
### EXPECTED OUTPUT:
(clean compile)
### COMPILER VERSION INFO (g++ -v):
Reading specs from /usr/lib64/gcc/x86_64-unknown-linux-gnu/12.2.0/specs
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib64/gcc/x86_64-unknown-linux-gnu/12.2.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: /builddir/gcc-12.2.0/configure
--build=x86_64-unknown-linux-gnu --enable-gnu-unique-object
--enable-vtable-verify --prefix=/usr --mandir=/usr/share/man
--infodir=/usr/share/info --libexecdir=/usr/lib64 --libdir=/usr/lib64
--enable-threads=posix --enable-__cxa_atexit --disable-multilib
--with-system-zlib --enable-shared --enable-lto --enable-plugins
--enable-linker-build-id --disable-werror --disable-nls --enable-default-pie
--enable-default-ssp --enable-checking=release --disable-libstdcxx-pch
--with-isl --with-linker-hash-style=gnu --disable-sjlj-exceptions
--disable-target-libiberty
--enable-languages=c,c++,objc,obj-c++,fortran,lto,go,ada
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.2.0 (GCC)