boostorg / boostorg/graph

Inconsistent usage for Property Map misuse produces different, unhelpful errors

Open
#472 2 comments 0 reactions 0 assignees View on GitHub
api
Dominant language
C++
Stars
392
Forks
239
Avg merge
1d 11m
Merged PRs (30d)
20

Description

Not sure this is a very helpful issue, as I am still catching up on Boost Concepts, but I will drop it for the record and discussion

## Problem 1: Algorithms that perform no check at all

When a user passes a property map with the wrong category to an algorithm, the compiler error is deeply nested and unhelpful.

For example, passing a read-only distance property map to dijkstra fails to compile with a long and rather cryptic error, ending with
```
app/boost/include/boost/property_map/property_map.hpp:311:40: error: lvalue required as left operand of assignment
311 | static_cast(pa)[k] = v;
```
[See on Compiler Explorer](https://godbolt.org/z/x6aqosvx5)

## Problem 2: Algorithms that check boost concepts

Some algorithms like Bellman use Boost Concepts to check the property map category, but the output is actually worse than no check.
[See on compiler explorer](https://godbolt.org/z/vqvsxhqj8)

## Proposal

I guess the use of Boost Concepts is justified by pre-C++11 `static_assert`. Also for documentation purpose. But maybe we should open a conversation on making compilation error messages more clear.

Maybe add `static_assert` checks for property map categories in algorithms that currently lack them:

```cpp
static_assert(
std::is_convertible<
typename property_traits::category,
read_write_property_map_tag>::value,
"distance_map must be a ReadWrite property map (supports both get and put)");
```

This produces a single line error:

```
error: static_assert failed "distance_map must be a ReadWrite property map
(supports both get and put)"
```

[See on Compiler Explorer](https://godbolt.org/z/xe3j7deoM)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.