- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
template<class... Bases>
struct MaminVisitor: public boost::static_visitor<>, public Bases... {
    MaminVisitor(Bases&&... bases) : Bases(std::move(bases))... { }
};
template<class Variant, class... F>
void match(Variant &&v, F &&... functors) {
    typedef MaminVisitor<typename std::decay<F>::type...> visitor_t;
    boost::apply_visitor(visitor_t(std::move(functors)...), std::forward<Variant>(v));
}
int main() {
    boost::variant<int, double, std::string> v = "ololo";
    match(v,
        [&](auto x) {
            std::cout << "auto branch " << x << std::endl;
        },
        [&](double x) {
            std::cout << "double branch " << x << std::endl;
        }
    );
    return 0;
}
                                     
        
            Сделал няшный матч, а на гцц не конпелируется.
http://ideone.com/J9ulsr