diff --git a/dune/subgrid/common/variant.hh b/dune/subgrid/common/variant.hh index e2132ea6c66de8266669eb87f8b9a44fe6143837..484e5fe8cb922e8695958fded77856a09262f2f9 100644 --- a/dune/subgrid/common/variant.hh +++ b/dune/subgrid/common/variant.hh @@ -125,10 +125,11 @@ namespace Impl { } template<typename Tp> - void set(Tp obj) { - Dune::Hybrid::ifElse(std::is_same<Tp, Head_>(), - [&](auto&& id) { head_=std::move(id(obj)); }, - [&](auto&& id) { return id(tail_).set(std::move(obj)); } + void set(Tp&& obj) { + using T = std::decay_t<Tp>; + Dune::Hybrid::ifElse(std::is_same<T, Head_>(), + [&](auto&& id) { id(head_)=std::forward<Tp>(obj); }, + [&](auto&& id) { return id(tail_).set(std::forward<Tp>(obj)); } ); }