https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102249
Bug ID: 102249 Summary: Can't compare pointer to functions during constant evaluation Product: gcc Version: 12.0 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: johelegp at gmail dot com CC: johelegp at gmail dot com Target Milestone: --- This is specified at https://eel.is/c++draft/expr.eq#3. See https://godbolt.org/z/Wdradsb4a. ```C++ #include <functional> static_assert(not std::ranges::equal_to{}([]{}, +[]{})); static_assert(std::not_equal_to{}([]{}, +[]{})); static_assert([]{} != +[]{}); ``` ``` <source>:2:15: error: non-constant condition for static assertion 2 | static_assert(not std::ranges::equal_to{}(+[]{}, +[]{})); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /opt/compiler-explorer/gcc-11.2.0/include/c++/11.2.0/bits/iterator_concepts.h:37, from /opt/compiler-explorer/gcc-11.2.0/include/c++/11.2.0/bits/stl_iterator_base_types.h:71, from /opt/compiler-explorer/gcc-11.2.0/include/c++/11.2.0/bits/stl_algobase.h:65, from /opt/compiler-explorer/gcc-11.2.0/include/c++/11.2.0/array:40, from /opt/compiler-explorer/gcc-11.2.0/include/c++/11.2.0/tuple:39, from /opt/compiler-explorer/gcc-11.2.0/include/c++/11.2.0/functional:54, from <source>:1: /opt/compiler-explorer/gcc-11.2.0/include/c++/11.2.0/bits/ranges_cmp.h:93:39: error: '(<lambda()>::_FUN == <lambda()>::_FUN)' is not a constant expression 93 | { return std::forward<_Tp>(__t) == std::forward<_Up>(__u); } | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ <source>:3:34: error: non-constant condition for static assertion 3 | static_assert(std::not_equal_to{}(+[]{}, +[]{})); | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~ In file included from /opt/compiler-explorer/gcc-11.2.0/include/c++/11.2.0/functional:49, from <source>:1: /opt/compiler-explorer/gcc-11.2.0/include/c++/11.2.0/bits/stl_function.h:509:41: error: '(<lambda()>::_FUN != <lambda()>::_FUN)' is not a constant expression 509 | { return std::forward<_Tp>(__t) != std::forward<_Up>(__u); } | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ <source>:4:21: error: non-constant condition for static assertion 4 | static_assert(+[]{} != +[]{}); <source>:4:21: error: '(<lambda()>::_FUN != <lambda()>::_FUN)' is not a constant expression Compiler returned: 1 ```