# std::atomic_fetch_xor, std::atomic_fetch_xor_explicit

From cppreference.com
< cpp‎ | atomic

Defined in header `<atomic>` |  |
| (1) | (since C++11)
template< class Integral > Integral atomic_fetch_xor( std::atomic<Integral>* obj, Integral arg ); |  |
template< class Integral > Integral atomic_fetch_xor( volatile std::atomic<Integral>* obj, Integral arg ); |  |
| (2) | (since C++11)
template< class Integral > Integral atomic_fetch_xor_explicit( std::atomic<Integral>* obj, Integral arg, std::memory_order order ); |  |
template< class Integral > Integral atomic_fetch_xor_explicit( volatile std::atomic<Integral>* obj, Integral arg, std::memory_order order ); |  |

Atomically replaces the value pointed by `obj` with the result of bitwise XOR between the old value of `obj` and `arg`. Returns the value `obj` held previously.

The operation is performed as if the following is executed:

1) obj->fetch_xor(arg)
2) obj->fetch_xor(arg, order)

### Parameters

obj | - | pointer to the atomic object to modify
arg | - | the value to bitwise XOR to the value stored in the atomic object
order | - | the memory sycnhronization ordering for this operation: all values are permitted.

### Return value

The value immediately preceding the effects of this function in the modification order of `*obj`.

### Exceptions

`noexcept` specification:
noexcept

### Possible implementation

    template< class T >
    typename std::enable_if<std::is_integral<T>::value && !std::is_same<T, bool>::value, T>::type
    atomic_fetch_xor( std::atomic<T>* obj, T arg );
    {
        return obj->fetch_xor(arg);
    }

### Example

| This section is incomplete Reason: no example

### See also

fetch_xor | atomically performs bitwise XOR between the argument and the value of the atomic object and obtains the value held previously (public member function of `std::atomic`)
atomic_fetch_or atomic_fetch_or_explicit (C++11)(C++11) | replaces the atomic object with the result of logical OR with a non-atomic argument and obtains the previous value of the atomic (function template)
atomic_fetch_and atomic_fetch_and_explicit (C++11)(C++11) | replaces the atomic object with the result of logical AND with a non-atomic argument and obtains the previous value of the atomic (function template)
C documentation for atomic_fetch_xor, atomic_fetch_xor_explicit

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/atomic/atomic_fetch_xor&oldid=91499"
Categories:

- unconditionally noexcept
- Todo no example

Hidden categories:

- Pages with unreviewed unconditional noexcept template
- Pages with unreviewed noexcept template