Я был несколько озадачен, обнаружив, что этот код компилируется, запускается и печатает 1 2 3:
#include <functional>
#include <iostream>
int main() {
std::function<int()> counter = [i = 0]() mutable { i++; return i; };
std::cout << counter() << std::endl;
const auto& constRef = counter;
std::cout << constRef() << std::endl;
std::cout << counter() << std::endl;
}
Кажется, что нарушение константной корректности может вызывать неконстантный operator()
основной функции, когда мы удерживаем const&
std::function
. Я что-то упускаю?
Годболт ссылка