https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114106
Bug ID: 114106
Summary: Wrong result of decltype
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: egor.pugin at gmail dot com
Target Milestone: ---
https://godbolt.org/z/ojbzGYqbW
MSVC works.
template <typename>
struct Type {};
template <typename... Ts>
struct ImplT : Ts...
{ using Ts::operator()...; };
template <typename... Ts>
using ImplA = ImplT<decltype([](Type<Ts>){})...>;
template <typename... Ts>
constexpr bool allUnique{
([]( ImplA<Ts...> x, Type<Ts> t )
{ x.operator()(t); return true;} && ...)}; // <- error is here
//static_assert(allUnique<int>); // also does not work
<source>: In lambda function:
<source>:16:18: error: request for member 'operator()' in 'x', which is of
non-class type 'int'
16 | { x.operator()(t); return true;} && ...)};
| ^