N-dimensional locator over immutable values. 
concept RandomAccessNDLocatorConcept<Regular Loc>
{
    typename value_type;        
    typename reference;         
    typename difference_type; where PointNDConcept<difference_type>; 
    typename const_t;           
    typename cached_location_t; 
    typename point_t  = difference_type;
    static const size_t num_dimensions; 
    where num_dimensions = point_t::num_dimensions;
    
    
    template <size_t D>
    struct axis
    {
        typename coord_t = point_t::axis<D>::coord_t;
        typename iterator; where RandomAccessTraversalConcept<iterator>; 
        where iterator::value_type == value_type;
    };
    
    template <PixelDereferenceAdaptorConcept Deref>
    struct add_deref
    {
        typename type;
            where RandomAccessNDLocatorConcept<type>;
        static type make(const Loc& loc, const Deref& deref);
    };
    Loc& operator+=(Loc&, const difference_type&);
    Loc& operator-=(Loc&, const difference_type&);
    Loc operator+(const Loc&, const difference_type&);
    Loc operator-(const Loc&, const difference_type&);
    reference operator*(const Loc&);
    reference operator[](const Loc&, const difference_type&);
    
    cached_location_t Loc::cache_location(const difference_type&) const;
    reference operator[](const Loc&,const cached_location_t&);
    
    template <size_t D> axis<D>::iterator&       Loc::axis_iterator();
    template <size_t D> axis<D>::iterator const& Loc::axis_iterator() const;
    template <size_t D> axis<D>::iterator        Loc::axis_iterator(const difference_type&) const;
};