[multi_span] Fix UB hack in static_bounds::operator=(const static_bounds&)

This commit is contained in:
Neil MacIntosh 2016-09-29 12:49:58 -07:00 committed by GitHub
commit e898a890e0

View File

@ -308,8 +308,6 @@ namespace details
{ {
} }
BoundsRanges(const BoundsRanges&) = default;
BoundsRanges& operator=(const BoundsRanges&) = default;
BoundsRanges(const std::ptrdiff_t* const) {} BoundsRanges(const std::ptrdiff_t* const) {}
BoundsRanges() = default; BoundsRanges() = default;
@ -346,9 +344,9 @@ namespace details
static const size_t DynamicNum = Base::DynamicNum + 1; static const size_t DynamicNum = Base::DynamicNum + 1;
static const size_type CurrentRange = dynamic_range; static const size_type CurrentRange = dynamic_range;
static const size_type TotalSize = dynamic_range; static const size_type TotalSize = dynamic_range;
const size_type m_bound; private:
size_type m_bound;
BoundsRanges(const BoundsRanges&) = default; public:
BoundsRanges(const std::ptrdiff_t* const arr) BoundsRanges(const std::ptrdiff_t* const arr)
: Base(arr + 1), m_bound(*arr * this->Base::totalSize()) : Base(arr + 1), m_bound(*arr * this->Base::totalSize())
@ -420,8 +418,6 @@ namespace details
static const size_type TotalSize = static const size_type TotalSize =
Base::TotalSize == dynamic_range ? dynamic_range : CurrentRange * Base::TotalSize; Base::TotalSize == dynamic_range ? dynamic_range : CurrentRange * Base::TotalSize;
BoundsRanges(const BoundsRanges&) = default;
BoundsRanges(const std::ptrdiff_t* const arr) : Base(arr) {} BoundsRanges(const std::ptrdiff_t* const arr) : Base(arr) {}
BoundsRanges() = default; BoundsRanges() = default;
@ -633,12 +629,6 @@ public:
constexpr static_bounds() = default; constexpr static_bounds() = default;
constexpr static_bounds& operator=(const static_bounds& otherBounds)
{
new (&m_ranges) MyRanges(otherBounds.m_ranges);
return *this;
}
constexpr sliced_type slice() const noexcept constexpr sliced_type slice() const noexcept
{ {
return sliced_type{static_cast<const details::BoundsRanges<RestRanges...>&>(m_ranges)}; return sliced_type{static_cast<const details::BoundsRanges<RestRanges...>&>(m_ranges)};