Boost logo

Boost Users :

Subject: [Boost-users] [variant][mpl] silly mistake in make_variant_over usage?
From: Nat Goodspeed (nat_at_[hidden])
Date: 2015-08-28 21:35:18


The following program fails to compile (148 lines of errors, will
paste on request) with
g++ (Ubuntu 4.9.2-0ubuntu1~14.04) 4.9.2 in -std=c++11 mode.

This is using Boost 1.59.0. Command line:

g++ -std=c++11 -I ~/boost_1_59_0 -o make_variant make_variant.cpp

I assume I'm making a simple error. I would appreciate your pointing
it out. Thank you!

(Is there a simpler way to obtain a variant of the result types of
passed functions? I was hoping I could just write: boost::variant<
std::result_of<Fns>::type... >.)

#include <boost/variant/variant.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/transform.hpp>
#include <type_traits> // std::result_of

template < typename... Fns >
typename boost::make_variant_over<
    boost::mpl::transform<
        boost::mpl::vector<Fns...>,
        std::result_of<boost::mpl::_1> > >::type
multiplex(Fns && ... functions)
{
    typedef typename boost::make_variant_over<
        boost::mpl::transform<
            boost::mpl::vector<Fns...>,
            std::result_of<boost::mpl::_1> > >::type return_t;
    // dummy for now
    return return_t();
}

int main(int argc, char *argv[])
{
    boost::variant<int, char*> var =
        multiplex([argc](){ return argc; },
                  [argv](){ return argv[0]; });
    return 0;
}


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net