aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCasey Carter <Casey@Carter.net>2016-09-27 21:12:51 -0700
committerCasey Carter <Casey@Carter.net>2016-09-27 21:12:51 -0700
commit67717ea6ae69f391807fec7ebbeb85c135e9facf (patch)
tree3e520039d3969245611efcb6fddff0818143424a
parent348a8595470b2ae7716a99ccacb8189821efb566 (diff)
downloadplatform_external_Microsoft-GSL-67717ea6ae69f391807fec7ebbeb85c135e9facf.tar.gz
platform_external_Microsoft-GSL-67717ea6ae69f391807fec7ebbeb85c135e9facf.tar.bz2
platform_external_Microsoft-GSL-67717ea6ae69f391807fec7ebbeb85c135e9facf.zip
[multi_span] Fix UB hack in static_bounds::operator=
* Make BoundsRanges<dynamic_range, ...>::m_bound non-const and private * Remove various defaulted copy constructor/assignment declarations from BoundsRanges specializations whose only effect is to needlessly suppress the generation of moves * Remove the hackish static_bounds::operator=(const static_bounds&). The implicitly generated default is now sufficient
-rw-r--r--gsl/multi_span16
1 files changed, 3 insertions, 13 deletions
diff --git a/gsl/multi_span b/gsl/multi_span
index 40752aa..2186c7b 100644
--- a/gsl/multi_span
+++ b/gsl/multi_span
@@ -308,8 +308,6 @@ namespace details
{
}
- BoundsRanges(const BoundsRanges&) = default;
- BoundsRanges& operator=(const BoundsRanges&) = default;
BoundsRanges(const std::ptrdiff_t* const) {}
BoundsRanges() = default;
@@ -346,9 +344,9 @@ namespace details
static const size_t DynamicNum = Base::DynamicNum + 1;
static const size_type CurrentRange = dynamic_range;
static const size_type TotalSize = dynamic_range;
- const size_type m_bound;
-
- BoundsRanges(const BoundsRanges&) = default;
+ private:
+ size_type m_bound;
+ public:
BoundsRanges(const std::ptrdiff_t* const arr)
: Base(arr + 1), m_bound(*arr * this->Base::totalSize())
@@ -420,8 +418,6 @@ namespace details
static const size_type TotalSize =
Base::TotalSize == dynamic_range ? dynamic_range : CurrentRange * Base::TotalSize;
- BoundsRanges(const BoundsRanges&) = default;
-
BoundsRanges(const std::ptrdiff_t* const arr) : Base(arr) {}
BoundsRanges() = default;
@@ -633,12 +629,6 @@ public:
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
{
return sliced_type{static_cast<const details::BoundsRanges<RestRanges...>&>(m_ranges)};