C++ 是否保证未命名的 lambda class 始终定义了 "operator bool()"?

Does C++ guarantee the lambda unnamed class always has an "operator bool()" defined?

#include <type_traits>

int main()
{
    auto f = [] {};
    static_assert(std::is_same_v<decltype(!f), bool>); // ok

    f.operator bool(); // error: ‘struct main()::<lambda()>’ 
                       // has no member named ‘operator bool’
}

C++ 是否保证未命名的 lambda class 总是有一个 operator bool() 定义?

没有,lambdas 没有 operator bool()

!f 之所以有效,是因为没有捕获的 lambda 可以转换为函数指针(它有一个转换运算符),然后可以转换为 bool,其值为 true,因为指针不为空。

另一方面,

int x;
auto f = [x] {};
!f; // not work; lambdas with captures can't convert to function pointer (and bool)