Есть фундаментальная проблема с тем, что вы делаете.Вы не можете заколдовать объект в существование.Переменная должна быть:
- Построена по умолчанию
- Построена копия
- Построена конструкция
- Построена с использованием другого конструктора.
4 вне стола, так как вы определили только первые три.Ваши конструкторы копирования и перемещения оба печатают вещи.Таким образом, единственный вывод, который можно сделать, состоит в том, что, если ничего не печатается, объект создается default .IE: заполнено ничем .
Короче говоря, ваш механизм передачи на основе Lambda, похоже, вообще ничего не передает.
После дальнейшего анализаЯ вижу, что происходит.Ваша лямбда на самом деле не принимает значение по ссылке;это создание значения.Если вы развернете макрос, то получите следующее:
B2 b32(([&] {return A()}));
Он создает временный;это на самом деле ничего не берет по ссылке.Так что я не уверен, что вы можете считать это "прохождением" чего-либо.Все, что вы делаете, это создаете функцию, которая создает объект.Вы также можете легко передать аргументы для конструктора B2::a
в конструктор B2
и использовать его для создания объекта, и это даст вам тот же эффект.
Выне передавая значение.Вы создаете функцию, которая всегда будет создавать один и тот же объект.Это не очень полезно.