diff options
Diffstat (limited to 'gcc/hash-set.h')
-rw-r--r-- | gcc/hash-set.h | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/hash-set.h b/gcc/hash-set.h index d891ed78297..a79a88d1ab9 100644 --- a/gcc/hash-set.h +++ b/gcc/hash-set.h @@ -21,6 +21,16 @@ along with GCC; see the file COPYING3. If not see #ifndef hash_set_h #define hash_set_h +/* Class hash_set is a hash-value based container for objects of + KeyId type. + KeyId may be a non-trivial (non-POD) type provided a suitabe Traits + class. Default Traits specializations are provided for basic types + such as integers, pointers, and std::pair. Inserted elements are + value-initialized either to zero for POD types or by invoking their + default ctor. Removed elements are destroyed by invoking their dtor. + On hash_set destruction all elements are removed. Objects of + hash_set type are copy-constructible but not assignable. */ + template<typename KeyId, bool Lazy = false, typename Traits = default_hash_traits<KeyId> > class hash_set @@ -48,7 +58,7 @@ public: Key *e = m_table.find_slot_with_hash (k, Traits::hash (k), INSERT); bool existed = !Traits::is_empty (*e); if (!existed) - *e = k; + new (e) Key (k); return existed; } |