Здравствуйте, Vinick, Вы писали:
V> auto op = Op<decltype(d)>(std::move(d)); V>.... V>.... V>.... V> auto gop = Op<decltype(g)>(std::move(g)); V>....
Здесь в шаблон уходит ссылка. Т.е. эти gop и op хранят ссылки, а не объекты. Естественно привязанные к ним объекты дохнут и ты получаешь проблему.
ИМХО, перестарался с автовыводом типов.
Добавление в Op и Cons std::remove_reference_t<D> решает проблему.