Boost logo

Boost Users :

Subject: Re: [Boost-users] [graph][spirit][variant] Boost.Graph and Boost.Spirit incompatible ?
From: Jeremiah Willcock (jewillco_at_[hidden])
Date: 2010-03-04 16:12:15


On Thu, 4 Mar 2010, Steven Watanabe wrote:

> AMDG
>
> Jeremiah Willcock wrote:
>> There are a lot of BGL overloads of get; it is intended to be found by ADL,
>> and there's (at least) one definition for each graph type. The graph
>> library's get has been around for a while. It is not globally reserved, at
>> least not technically; it only applies to known graph and property map
>> types, just like variant's. The problem is that variant's get takes
>> explicit template arguments and that seems to make the overloading work
>> incorrectly. I suspect that the error in this thread, for example, is
>> coming from the boost::get version for two_bit_color_map; that function is
>> restricted to work on only that property map type but instantiating its
>> signature appears to be failing without SFINAE because of the explicit
>> template argument.
>
> SFINAE doesn't apply for this overload of get.

OK -- I see that it's really the reference to the member type key_type
that's causing the class to be instantiated, which is not a SFINAE error.

>> I think this is something that's fixed in C++0x but that doesn't help us
>> now. Your workaround might fix the common cases though (since the compiler
>> seems to differentiate functions based on the number of template arguments
>> given); for some reason, the extra template argument in ::key_type is
>> important in that definition of get. It will be annoying to have to work
>> around this issue repeatedly, though.
>
> Property maps that use put_get_helper seem to be okay.

Yes -- that uses two template parameters. There are only a few other
places that need to be changed:

one_bit_color_map.hpp (a copy of the two-bit one)
csr_vertex_local_map in distributed/compressed_sparse_row_graph.hpp
the Stanford GraphBase interface
A few property maps in distributed/adjacency_list.hpp

Should I just go ahead and do those? I do not know if your key_type thing
will work in some of the other places -- the compiler seems sensitive to
that.

-- Jeremiah Willcock


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