 template<typename Iterator>
 class cycle_iterator_adapter {
 public:
-    typedef typename std::iterator_traits<Iterator>::value_type         value_type; 
-    typedef typename std::iterator_traits<Iterator>::difference_type    difference_type;
-    typedef typename std::iterator_traits<Iterator>::pointer            pointer;
-    typedef typename std::iterator_traits<Iterator>::reference          reference;
-    typedef Iterator                                                    iterator_type;
+    using value_type = typename std::iterator_traits<Iterator>::value_type; 
+    using difference_type = typename std::iterator_traits<Iterator>::difference_type;
+    using pointer = typename std::iterator_traits<Iterator>::pointer;
+    using reference = typename std::iterator_traits<Iterator>::reference;
+    using iterator_type = Iterator;
     
     cycle_iterator_adapter() = delete;
     

{

public:
    typedef size_t                                          size_type;
    typedef Hasher                                          hasher;
    typedef Equality                                        key_equal;
    typedef Allocator                                       allocator_type;
    typedef Key                                             key_type;
    typedef thrust::pair<Key, Element>                      value_type;
    typedef Element                                         mapped_type;
    typedef cycle_iterator_adapter<value_type*>             iterator;
    typedef const cycle_iterator_adapter<value_type*>       const_iterator;

private:
    union pair2longlong

          // has its initial value
          // TODO: Use template specialization to make use of native atomic functions
          // TODO: How to handle data types less than 32 bits?
          if ( keys_equal( unused_key, old_key ) || keys_equal(insert_key, old_key) ) {

            update_existing_value(existing_value, x, op);

