Компилятор не пишет C ++; он не подчиняется тем же правилам, что и мы.
До C ++ 20 мы не могли по умолчанию конструировать тип замыкания с использованием C ++. Но это не меняет того факта, что стандарт говорит, что лямбда-выражение создает объект типа замыкания. Таким образом, компилятор должен заставить его делать это, и ему никогда не нужно было go через конструктор по умолчанию, чтобы сделать это. Хорошо! Никогда не было никаких правил, в которых говорилось бы, что нужно использовать такую технику.
Извините, что нет более удовлетворительного ответа, но на самом деле это просто "потому что так говорится в стандарте".
Смотрите также: почему компилятор может определить встроенный тип (например, int
), когда мы не можем? Потому что!