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<
        std::result_of<boost::mpl::_1> > >::type
multiplex(Fns && ... functions)
    typedef typename boost::make_variant_over<
            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, kalb at, bjorn.karlsson at, gregod at, wekempf at