Boost logo

Boost Users :

Subject: [Boost-users] [variant] Possible regression from 1.55 to 1.58
From: Mario Lang (mlang_at_[hidden])
Date: 2015-08-11 05:46:25


I just upgraded my Boost from 1.55 to 1.58. My project doesn't build
anymore, it fails on the following pattern, which used to work with 1.55:

#include <algorithm>
#include <boost/variant.hpp>
#include <string>
#include <iostream>
#include <vector>

struct visitor : boost::static_visitor<std::ostream &> {
  result_type operator() (int) { return std::cout; }
  result_type operator() (std::string) const { return std::cout; }

int main() {
  std::vector< boost::variant<int, std::string> > v;
  visitor vis;
  foreach(v.begin(), v.end(), boost::apply_visitor(vis));
  return 0;

The example is a bit silly, since foreach discards the return value of
apply_visitor anyway. So my solution was to change the visitor to
define result_type as void. This works. However, I am wondering why
delayed_visitor does no longer work in this situation? Is it because I
am trying to return a reference?


Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at