Inconsistent usage for Property Map misuse produces different, unhelpful errors
- 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
Assessment
This issue has not been assessed yet.