Skip to content

Conversation

mjacobse
Copy link
Contributor

I had issues when constructing spans from std::arrays with size 0 in Visual Studio. In Debug builds it has its container debugging mode for the standard library enabled (_CONTAINER_DEBUG_LEVEL > 0) and breaks on an assertion error when operator[] is called with 0. I then tried the stdlibc++ debug mode (-D_GLIBCXX_DEBUG) and it shows the same problem. I guess that technically &arr[0] is not a bug, but practically it can become a problem with these debug modes. I couldn't think of a disadvantage of using .data(), so I propose to use that instead.

Use .data() instead of &arr[0] to get the array pointer. This avoids
calling operator[] with 0, which causes assertions in some debug modes
to fail. For example when using -D_GLIBCXX_DEBUG for the libstdc++ debug
mode. In Visual Studio, a similar debug mode is even the default for
Debug builds, so this problem can occur quite easily.
@martinmoene martinmoene merged commit c28d3e4 into martinmoene:master Jun 12, 2020
@martinmoene
Copy link
Owner

Thanks @mjacobse !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants