The error points to this in the standard libraries (with GCC)
Code:
*__result = __value;
and it means that the result of dereferencing your iterator (*__result) must be something that can be assigned to (used on the left side of the assignment operator).
However, your operator * is defined like this:
Code:
const T operator *() const { return current->value; }
It should return a reference (non-const - for completeness you'd need a separate const_iterator class that returns a const reference):
Code:
T& operator *() const { return current->value; }