mirror of
https://github.com/boostorg/iterator.git
synced 2025-07-29 12:27:33 +02:00
Disable operator_brackets_proxy assignment if reference is not assignable.
Use SFINAE to disable operator_brackets_proxy assignment operator is reference is not assignable from the assignment argument. Also fix the iterator type in std::declval in noexcept specification.
This commit is contained in:
@ -360,12 +360,17 @@ public:
|
|||||||
|
|
||||||
template< typename T >
|
template< typename T >
|
||||||
typename std::enable_if<
|
typename std::enable_if<
|
||||||
!std::is_same<
|
detail::conjunction<
|
||||||
operator_brackets_proxy< Iterator >,
|
detail::negation<
|
||||||
typename std::remove_cv< typename std::remove_reference< T >::type >::type
|
std::is_same<
|
||||||
|
operator_brackets_proxy< Iterator >,
|
||||||
|
typename std::remove_cv< typename std::remove_reference< T >::type >::type
|
||||||
|
>
|
||||||
|
>,
|
||||||
|
std::is_assignable< reference, T&& >
|
||||||
>::value,
|
>::value,
|
||||||
operator_brackets_proxy&
|
operator_brackets_proxy&
|
||||||
>::type operator= (T&& val) noexcept(noexcept(*std::declval< Iterator const& >() = std::declval< T&& >()))
|
>::type operator= (T&& val) noexcept(noexcept(*std::declval< Iterator& >() = std::declval< T&& >()))
|
||||||
{
|
{
|
||||||
*m_iter = static_cast< T&& >(val);
|
*m_iter = static_cast< T&& >(val);
|
||||||
return *this;
|
return *this;
|
||||||
|
Reference in New Issue
Block a user