|
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