Skip to content

Commit cbd64c9

Browse files
Anna Gringauzeneilmacintosh
authored andcommitted
fixed noexept warnings (microsoft#632)
* fixed noexept warnings - Removed conditional compilation for throwing version of GSL vs fail_fast because we don't want users of the code to see differences in the span interface dependent on error mechanism chosen - Removed noexcept from functions that may fail at runtime - Fixed CppCoreCheck warnings related to missing and incorrect noexcept - do not warn on unnown attributes for GCC and Clang * remove suppress that does not compiler for clang and gcc
1 parent ed3693f commit cbd64c9

File tree

1 file changed

+18
-25
lines changed

1 file changed

+18
-25
lines changed

include/gsl/span

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,7 @@
4949
#endif // _MSC_VER < 1910
5050
#endif // _MSC_VER
5151

52-
#ifdef GSL_THROW_ON_CONTRACT_VIOLATION
53-
#define GSL_NOEXCEPT /*noexcept*/
54-
#else
5552
#define GSL_NOEXCEPT noexcept
56-
#endif // GSL_THROW_ON_CONTRACT_VIOLATION
5753

5854
namespace gsl
5955
{
@@ -127,9 +123,7 @@ namespace details
127123

128124
constexpr span_iterator(const Span* span, typename Span::index_type idx) GSL_NOEXCEPT
129125
: span_(span), index_(idx)
130-
{
131-
Expects(span == nullptr || (0 <= index_ && index_ <= span_->size()));
132-
}
126+
{}
133127

134128
friend span_iterator<Span, true>;
135129
template<bool B, std::enable_if_t<!B && IsConst>* = nullptr>
@@ -138,74 +132,74 @@ namespace details
138132
{
139133
}
140134

141-
constexpr reference operator*() const GSL_NOEXCEPT
135+
constexpr reference operator*() const
142136
{
143137
Expects(index_ != span_->size());
144138
return *(span_->data() + index_);
145139
}
146140

147-
constexpr pointer operator->() const GSL_NOEXCEPT
141+
constexpr pointer operator->() const
148142
{
149143
Expects(index_ != span_->size());
150144
return span_->data() + index_;
151145
}
152146

153-
constexpr span_iterator& operator++() GSL_NOEXCEPT
147+
constexpr span_iterator& operator++()
154148
{
155149
Expects(0 <= index_ && index_ != span_->size());
156150
++index_;
157151
return *this;
158152
}
159153

160-
constexpr span_iterator operator++(int) GSL_NOEXCEPT
154+
constexpr span_iterator operator++(int)
161155
{
162156
auto ret = *this;
163157
++(*this);
164158
return ret;
165159
}
166160

167-
constexpr span_iterator& operator--() GSL_NOEXCEPT
161+
constexpr span_iterator& operator--()
168162
{
169163
Expects(index_ != 0 && index_ <= span_->size());
170164
--index_;
171165
return *this;
172166
}
173167

174-
constexpr span_iterator operator--(int) GSL_NOEXCEPT
168+
constexpr span_iterator operator--(int)
175169
{
176170
auto ret = *this;
177171
--(*this);
178172
return ret;
179173
}
180174

181-
constexpr span_iterator operator+(difference_type n) const GSL_NOEXCEPT
175+
constexpr span_iterator operator+(difference_type n) const
182176
{
183177
auto ret = *this;
184178
return ret += n;
185179
}
186180

187-
constexpr span_iterator& operator+=(difference_type n) GSL_NOEXCEPT
181+
constexpr span_iterator& operator+=(difference_type n)
188182
{
189183
Expects((index_ + n) >= 0 && (index_ + n) <= span_->size());
190184
index_ += n;
191185
return *this;
192186
}
193187

194-
constexpr span_iterator operator-(difference_type n) const GSL_NOEXCEPT
188+
constexpr span_iterator operator-(difference_type n) const
195189
{
196190
auto ret = *this;
197191
return ret -= n;
198192
}
199193

200-
constexpr span_iterator& operator-=(difference_type n) GSL_NOEXCEPT { return *this += -n; }
194+
constexpr span_iterator& operator-=(difference_type n) { return *this += -n; }
201195

202-
constexpr difference_type operator-(span_iterator rhs) const GSL_NOEXCEPT
196+
constexpr difference_type operator-(span_iterator rhs) const
203197
{
204198
Expects(span_ == rhs.span_);
205199
return index_ - rhs.index_;
206200
}
207201

208-
constexpr reference operator[](difference_type n) const GSL_NOEXCEPT
202+
constexpr reference operator[](difference_type n) const
209203
{
210204
return *(*this + n);
211205
}
@@ -225,7 +219,6 @@ namespace details
225219
constexpr friend bool operator<(span_iterator lhs,
226220
span_iterator rhs) GSL_NOEXCEPT
227221
{
228-
Expects(lhs.span_ == rhs.span_);
229222
return lhs.index_ < rhs.index_;
230223
}
231224

@@ -255,15 +248,15 @@ namespace details
255248
template <class Span, bool IsConst>
256249
constexpr span_iterator<Span, IsConst>
257250
operator+(typename span_iterator<Span, IsConst>::difference_type n,
258-
span_iterator<Span, IsConst> rhs) GSL_NOEXCEPT
251+
span_iterator<Span, IsConst> rhs)
259252
{
260253
return rhs + n;
261254
}
262255

263256
template <class Span, bool IsConst>
264257
constexpr span_iterator<Span, IsConst>
265258
operator-(typename span_iterator<Span, IsConst>::difference_type n,
266-
span_iterator<Span, IsConst> rhs) GSL_NOEXCEPT
259+
span_iterator<Span, IsConst> rhs)
267260
{
268261
return rhs - n;
269262
}
@@ -511,15 +504,15 @@ private:
511504
template <std::ptrdiff_t CallerExtent>
512505
span<element_type, dynamic_extent> make_subspan(index_type offset,
513506
index_type count,
514-
subspan_selector<CallerExtent>) const GSL_NOEXCEPT
507+
subspan_selector<CallerExtent>) const
515508
{
516509
span<element_type, dynamic_extent> tmp(*this);
517510
return tmp.subspan(offset, count);
518511
}
519512

520513
span<element_type, dynamic_extent> make_subspan(index_type offset,
521514
index_type count,
522-
subspan_selector<dynamic_extent>) const GSL_NOEXCEPT
515+
subspan_selector<dynamic_extent>) const
523516
{
524517
Expects(offset >= 0 && size() - offset >= 0);
525518
if (count == dynamic_extent)
@@ -631,7 +624,7 @@ constexpr span<ElementType> make_span(ElementType* firstElem, ElementType* lastE
631624
}
632625

633626
template <class ElementType, std::size_t N>
634-
constexpr span<ElementType, N> make_span(ElementType (&arr)[N])
627+
constexpr span<ElementType, N> make_span(ElementType (&arr)[N]) GSL_NOEXCEPT
635628
{
636629
return span<ElementType, N>(arr);
637630
}

0 commit comments

Comments
 (0)