考虑以下代码片段(demo):
const auto lambda = [] () mutable {};
using Lambda = decltype(lambda);
static_assert(!std::is_function_v<Lambda>);
static_assert(std::is_class_v<Lambda>);
void (Lambda::*ptr)() = &Lambda::operator(); // operator() is not const
// Calling non-const method:
lambda(); // SURPRISE: this works
// lambda.operator()(); // error: conversion loses qualifiers
lambda();
行可以编译?=
的 []
中添加 lambda
,它不会编译。为什么这会有所不同?注意,以下两种类型是相同的(demo):
class C;
using CC = const C;
static_assert(std::is_same_v<void (C::*)(), void (CC::*)()>);