/* This file is part of the dynarmic project. * Copyright (c) 2016 MerryMage * This software may be used and distributed according to the terms of the GNU * General Public License version 2 or any later version. */ #pragma once #include namespace Dynarmic { namespace Common { namespace detail { template struct VariantVisitor : boost::static_visitor, Lambda { VariantVisitor(Lambda&& lambda) : Lambda(std::move(lambda)) {} using Lambda::operator(); }; } // namespace detail template inline ReturnT VisitVariant(Variant&& variant, Lambda&& lambda) { return boost::apply_visitor(detail::VariantVisitor(std::move(lambda)), variant); } } // namespace Common } // namespace Dynarmic