diff --git a/include/slice.hpp b/include/slice.hpp index c5b63fa..4135fad 100644 --- a/include/slice.hpp +++ b/include/slice.hpp @@ -51,7 +51,7 @@ struct Span { template struct Span::Slice : public Span { inline Slice(T* ptr, size_t sz) : _area((void*)ptr), _size(sz){} - inline Slice(const Span& slice) : _area(slice.area()), _size(slice.size()){} + inline Slice(const Span& slice) : _area(const_cast(slice.area())), _size(slice.size()){} inline Slice(const Slice& copy) = default; inline Slice(Slice&& copy) : _area(copy._area), _size(copy._size){ *const_cast(©._size) = 0; } Slice() = delete; @@ -65,5 +65,6 @@ struct Span::Slice : public Span { const size_t _size; }; + template -typename Span::Slice Slice; +using Slice = Span::Slice; diff --git a/src/test/main.cpp b/src/test/main.cpp index f40771e..0e99c2a 100644 --- a/src/test/main.cpp +++ b/src/test/main.cpp @@ -3,6 +3,11 @@ #include #include +void print_slice(Slice memory) +{ + printf("slice: { %p, %lu }\n", memory.area(), memory.size()); +} + void write_fake(Cow& clone, const char* string) { strncpy(clone.area_as(), string, clone.size_as()-1); @@ -17,6 +22,9 @@ int main() { Cow real(4096); + printf("Created real: "); + print_slice(real); + write_fake(real, "Hello world"); read_fake(real);