I want to make gsl::span to be as debug friendly as std::vector/std::array, in the Visual Studio debugging environment.
Here is what I mean.
Given this code
struct custom_class
{
custom_class(std::vector<int> & foo) : ptr(foo.data()), length(foo.size())
{}
int* ptr;
size_t length;
};
void vector_example()
{
std::vector<int> vector_foo = { 0,1,3,4,5,6,3,2 };
std::array<int, 8> array_foo = { 0,1,3,4,5,6,3,2 };
gsl::span<int> span_foo(vector_foo);
custom_class custom_class_foo(vector_foo);
std::cout << "How can I make my class as debug friendly as std::array and std::vector?" << "\n";
}
The debugger is able to visual std::vector/array like this:
std::array
- array_foo { size=8 } std::array<int,8>
[0] 0 int
[1] 1 int
[2] 3 int
[3] 4 int
[4] 5 int
[5] 6 int
[6] 3 int
[7] 2 int
+ [Raw View] {_Elems=0x000000654696f368 {0, 1, 3, 4, 5, 6, 3, 2} } std::array<int,8>
std::vector
- vector_foo { size=8 } std::vector<int,std::allocator<int>>
[capacity] 8 __int64
+ [allocator] allocator std::_Compressed_pair<std::allocator<int>,std::_Vector_val<std::_Simple_types<int>>,1>
[0] 0 int
[1] 1 int
[2] 3 int
[3] 4 int
[4] 5 int
[5] 6 int
[6] 3 int
[7] 2 int
+ [Raw View] {_Mypair=allocator } std::vector<int,std::allocator<int>>
But when I look at std::span and my own custom class, I can't look past the first indice in the debugger
Custom Class
- custom_class_foo {ptr=0x0000015f50e3c340 {0} length=8 } `anonymous-namespace'::custom_class
- ptr 0x0000015f50e3c340 {0} int *
0 int
length 8 unsigned __int64
gsl::span
- span_foo {storage_={data_=0x000001f5bb2fdc20 {0} } } gsl::span<int,-1>
- storage_ {data_=0x000001f5bb2fdc20 {0} } gsl::span<int,-1>::storage_type<gsl::details::extent_type<-1>>
- gsl::details::extent_type<-1> {size_=8 } gsl::details::extent_type<-1>
size_ 8 __int64
- data_ 0x000001f5bb2fdc20 {0} int *
0 int