Почему следующий код компилируется?
#include <memory>
#include <vector>
int main()
{
std::vector<std::unique_ptr<int>> uncopyableStuff;
for(int i = 0; i < 5; ++i)
uncopyableStuff.emplace_back(std::make_unique<int>(i));
auto lambda = [uncopyableStuff = std::move(uncopyableStuff)](){};
static_assert(std::is_copy_constructible<decltype(lambda)>::value);
}
Мне кажется, что лямбда не может быть скопирована, потому что, когда я пытаюсь скопировать ее следующим образом:
auto copy = lambda;
Это дает мнеошибка компиляции (как я и ожидал).Есть ли какие-то исключения для черт лямбды и черты конструктивности копирования?
См. Ссылку для примера Godbolt: https://godbolt.org/z/GByclH
РЕДАКТИРОВАТЬ:
Как правильно определить, является лиЛямбда будет компилироваться при попытке копирования.Я не интересуюсь теоретической конструкцией копии данного вызываемого объекта, но обнаруживаю успешную конструкцию копии.Мне все еще кажется очень странным, что конструктор векторных копий определен таким образом.