variant.hpp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#pragma once


#include <variant>


namespace planet {


    namespace detail {
        template<typename... Os>
        struct mixed : private Os... {
            using Os::operator()...;
        };
    }


    template<typename V, typename... Os>
    auto visit(V &&v, Os... lambdas) {
        return std::visit(detail::mixed{lambdas...}, std::forward<V>(v));
    }


}