boostorg / boostorg/graph

Vertex property `vertex_index_t` silently discarded when `vecS` selector used vertex list

Đang mở
#420 1 bình luận 0 reaction 0 người được giao Xem trên GitHub
data structure priority: low
Ngôn ngữ chính
C++
Star
392
Fork
239
Merge trung bình
1 ngày 11 phút
Pull request đã merge (30 ngày)
20

Mô tả

As in the title.

Consider the following code

```cpp
#include
#include
#include
#include

typedef int v_index;
typedef long e_index;

typedef boost::adjacency_list<
boost::vecS, // OutEdgeList
boost::vecS, // VertexList
boost::undirectedS, // DirectedS
boost::property, // Vertex property.
boost::no_property, // Edge property (can be enhanced if needed).
boost::no_property, // Graph property.
boost::vecS // EdgeList
> Graph;

typedef boost::property_map::type vertex_to_int_map;

static_assert(std::is_same_v,
"The vertex property map's value type must be v_index");
```

The static assertion fails. Changing `VertexList` to e.g. `boost::listS` makes it pass.

This causes a little problem in generic code which assumes the type returned by the `vertex_to_int_map` property map is equal to `v_index`. For example https://github.com/sagemath/sage/pull/39526 .

Not sure what's the best course of action here. I think the easiest one would be to make the property map just cast the result to the correct type (assume it can be casted of course, but what if the user specifies something weird like `std::string`?)

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.