Sobrecarregando operadores de streaming para uma saída de pacote configurável Boost Graph para GraphViz

É possível usar propriedades agrupadas na Boost Graph Library, com um tipo de biblioteca padrão, enquanto também usa a sobrecarga desse tipo do<< operador de fluxo para satisfazerwrite_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;
}

Diante de uma afirmação estática Boost, modifiquei meu código para o acima; adotando uma sugestão deaqui, onde no<< implementação é definida dentro doboost::detail::has_left_shift_impl namespace. Infelizmente, agora estou com outro erro:

/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();

Existe uma maneira de fornecer uma sobrecarga de<< que pode ser usado porwrite_graphviz? Estou usando o Ubuntu 14.10 e o GCC 4.9.1.

questionAnswers(1)

yourAnswerToTheQuestion