 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

     * 
     * @Param x The new (key, value) pair to insert
     * @Param op The aggregation operation to perform
     * @Param keys_equal An optional functor for comparing two keys 
     * @tparam aggregation_type A functor for a binary operation that performs the aggregation
     * @tparam comparison_type A functor for comparing two keys
     * 
     * @Returns An iterator to the newly inserted key,value pair
     */
    /* ----------------------------------------------------------------------------*/
    template<typename aggregation_type,
             class comparison_type = key_equal>
    __forceinline__
    __device__ iterator insert(const value_type& x, 
                               aggregation_type op,
                               comparison_type keys_equal = key_equal() )
    {
        const size_type hashtbl_size    = m_hashtbl_size;
        value_type* hashtbl_values      = m_hashtbl_values;
