Sobrecarga de operadores de transmisión para una salida de paquete Boost Graph para GraphViz

¿Es posible usar propiedades agrupadas en la Biblioteca de gráficos de refuerzo, con un tipo de biblioteca estándar, mientras que también se usa la sobrecarga de ese tipo de<< operador de flujo para satisfacerwrite_graphviz?

#include <boost/graph/graphviz.hpp>

namespace boost {
  namespace detail {
    namespace has_left_shift_impl {
      template <typename T>
      inline std::ostream &operator<<(std::ostream &o, const std::array<T,2> &a) {
        o << a[0] << ',' << a[1];
        return o;
      }
    }
  }
}

static_assert(boost::has_left_shift<
                std::basic_ostream<char>,
                std::array<double,2>
              >::value,"");

int main()
{
  using namespace boost;
  typedef adjacency_list<vecS, vecS, directedS, no_property, std::array<double,2>> Graph;
  Graph g;
  add_edge(0, 1, {123,456}, g);
  write_graphviz(std::cout, g, default_writer(),
                   make_label_writer(boost::get(edge_bundle,g)));
  return 0;
}

Frente a una afirmación estática de Boost, modifiqué mi código al anterior; adoptando una sugerencia deaquí, Donde en el<< la implementación se define dentro de laboost::detail::has_left_shift_impl espacio de nombres Por desgracia, ahora me enfrento con otro error:

/usr/include/boost/lexical_cast.hpp:1624:50: error: cannot bind ‘std::basic_ostream<char>’ lvalue to ‘std::basic_ostream<char>&&’
                 bool const result = !(out_stream << input).fail();

¿Hay alguna manera de proporcionar una sobrecarga de<< que puede ser usado porwrite_graphviz? Estoy usando Ubuntu 14.10 y GCC 4.9.1.

Respuestas a la pregunta(1)

Su respuesta a la pregunta