Disable macro max in Windows. Implement move ctors in string_span for VS2013. Remove redundant pragma warning pop for VS2013.

This commit is contained in:
Pascal Menuet 2015-12-11 20:47:07 +01:00
parent ace63c5a9d
commit 37cdb6bc50
2 changed files with 26 additions and 2 deletions

View File

@ -45,6 +45,12 @@
#pragma push_macro("constexpr")
#define constexpr
// On Windows, if NOMINMAX is not defined, then windows.h defines the macro max
#ifdef _WIN32
#pragma push_macro("max")
#define max max
#endif
// VS 2013 workarounds
#if _MSC_VER <= 1800
@ -2196,6 +2202,11 @@ general_span_iterator<Span> operator+(typename general_span_iterator<Span>::diff
#undef constexpr
#pragma pop_macro("constexpr")
#ifdef _WIN32
#undef max
#pragma pop_macro("max")
#endif
#if _MSC_VER <= 1800
#pragma warning(pop)

View File

@ -235,13 +235,28 @@ public:
constexpr basic_string_span(const basic_string_span& other) = default;
// move
#ifdef GSL_MSVC_NO_SUPPORT_FOR_MOVE_CTOR_DEFAULT
constexpr basic_string_span(basic_string_span&& other)
: span_(std::move(other.span_))
{
}
#else
constexpr basic_string_span(basic_string_span&& other) = default;
#endif
// assign
constexpr basic_string_span& operator=(const basic_string_span& other) = default;
// move assign
#ifdef GSL_MSVC_NO_SUPPORT_FOR_MOVE_CTOR_DEFAULT
constexpr basic_string_span& operator=(basic_string_span&& other)
{
span_ = std::move(other.span_);
return *this;
}
#else
constexpr basic_string_span& operator=(basic_string_span&& other) = default;
#endif
// from nullptr and length
constexpr basic_string_span(std::nullptr_t ptr, size_type length) noexcept
@ -561,8 +576,6 @@ bool operator>=(const gsl::basic_string_span<CharT, Extent>& one, const gsl::bas
#if _MSC_VER <= 1800
#pragma warning(pop)
#ifndef GSL_THROW_ON_CONTRACT_VIOLATION
#undef noexcept
#pragma pop_macro("noexcept")