10#ifndef XTENSOR_NOALIAS_HPP
11#define XTENSOR_NOALIAS_HPP
13#include "xsemantic.hpp"
93 : m_array(std::forward<A>(
a))
99 inline auto noalias_proxy<A>::operator=(
const E& e) -> disable_xexpression<E, A>
101 return m_array.assign(xscalar<E>(e));
106 inline auto noalias_proxy<A>::operator+=(
const E& e) -> disable_xexpression<E, A>
108 return m_array.scalar_computed_assign(e, std::plus<>());
113 inline auto noalias_proxy<A>::operator-=(
const E& e) -> disable_xexpression<E, A>
115 return m_array.scalar_computed_assign(e, std::minus<>());
120 inline auto noalias_proxy<A>::operator*=(
const E& e) -> disable_xexpression<E, A>
122 return m_array.scalar_computed_assign(e, std::multiplies<>());
127 inline auto noalias_proxy<A>::operator/=(
const E& e) -> disable_xexpression<E, A>
129 return m_array.scalar_computed_assign(e, std::divides<>());
134 inline auto noalias_proxy<A>::operator%=(
const E& e) -> disable_xexpression<E, A>
136 return m_array.scalar_computed_assign(e, std::modulus<>());
141 inline auto noalias_proxy<A>::operator&=(
const E& e) -> disable_xexpression<E, A>
143 return m_array.scalar_computed_assign(e, std::bit_and<>());
148 inline auto noalias_proxy<A>::operator|=(
const E& e) -> disable_xexpression<E, A>
150 return m_array.scalar_computed_assign(e, std::bit_or<>());
155 inline auto noalias_proxy<A>::operator^=(
const E& e) -> disable_xexpression<E, A>
157 return m_array.scalar_computed_assign(e, std::bit_xor<>());
162 inline A noalias_proxy<A>::operator=(
const xexpression<E>& e)
164 return m_array.assign(e);
169 inline A noalias_proxy<A>::operator+=(
const xexpression<E>& e)
171 return m_array.plus_assign(e);
176 inline A noalias_proxy<A>::operator-=(
const xexpression<E>& e)
178 return m_array.minus_assign(e);
183 inline A noalias_proxy<A>::operator*=(
const xexpression<E>& e)
185 return m_array.multiplies_assign(e);
190 inline A noalias_proxy<A>::operator/=(
const xexpression<E>& e)
192 return m_array.divides_assign(e);
197 inline A noalias_proxy<A>::operator%=(
const xexpression<E>& e)
199 return m_array.modulus_assign(e);
204 inline A noalias_proxy<A>::operator&=(
const xexpression<E>& e)
206 return m_array.bit_and_assign(e);
211 inline A noalias_proxy<A>::operator|=(
const xexpression<E>& e)
213 return m_array.bit_or_assign(e);
218 inline A noalias_proxy<A>::operator^=(
const xexpression<E>& e)
220 return m_array.bit_xor_assign(e);
224 inline noalias_proxy<xtl::closure_type_t<A>> noalias(A&& a)
noexcept
226 return noalias_proxy<xtl::closure_type_t<A>>(a);
standard mathematical functions for xexpressions