Index: trunk/nv/stl/container/hash_table_policy.hh
===================================================================
--- trunk/nv/stl/container/hash_table_policy.hh	(revision 404)
+++ trunk/nv/stl/container/hash_table_policy.hh	(revision 405)
@@ -257,5 +257,11 @@
 		inline void entry_construct( entry_type* entry, hash_type hash_code, Args&&... params ) const
 		{
-			copy_construct_object( &( entry->value ), ::nv::forward<Args>( params ) );
+			construct_object( &( entry->value ), ::nv::forward<Args>( params )... );
+			entry->hash_code = hash_code;
+		}
+
+		inline void entry_construct( entry_type* entry, hash_type hash_code, Key key ) const
+		{
+			construct_object( &( entry->value ), value_type( ::nv::move( key ), mapped_type() ) );
 			entry->hash_code = hash_code;
 		}
Index: trunk/src/gfx/texture_font.cc
===================================================================
--- trunk/src/gfx/texture_font.cc	(revision 404)
+++ trunk/src/gfx/texture_font.cc	(revision 405)
@@ -38,8 +38,8 @@
 	FT_Error error;
 	FT_Matrix matrix = { 
-		(int)((1.0/hres) * 0x10000L),
-		(int)((0.0)      * 0x10000L),
-		(int)((0.0)      * 0x10000L),
-		(int)((1.0)      * 0x10000L) 
+		static_cast<int>((1.0/hres) * 0x10000L),
+		static_cast<int>((0.0)      * 0x10000L),
+		static_cast<int>((0.0)      * 0x10000L),
+		static_cast<int>((1.0)      * 0x10000L)
 	};
 
@@ -50,19 +50,19 @@
 	m_lcd_weights[4] = 0x10;
 	 
-	error = FT_Init_FreeType( (FT_Library*)(&m_rlibrary) );
+	error = FT_Init_FreeType( reinterpret_cast<FT_Library*>(&m_rlibrary) );
 	NV_CHECK_FREETYPE_ERROR( error, "error on FT_Init_FreeType, code - ", error );
 
-	error = FT_New_Face( (FT_Library)(m_rlibrary), filename, 0, (FT_Face*)(&m_rface) );
+	error = FT_New_Face( reinterpret_cast<FT_Library>(m_rlibrary), filename, 0, reinterpret_cast<FT_Face*>(&m_rface) );
 	NV_CHECK_FREETYPE_ERROR( error, "error on FT_New_Face, code - ", error );
 
-	error = FT_Set_Char_Size( (FT_Face)(m_rface), (int)(size*64), 0, 72*64, 72 ); 
+	error = FT_Set_Char_Size( reinterpret_cast<FT_Face>(m_rface), int(size*64), 0, 72*64, 72 );
 	NV_CHECK_FREETYPE_ERROR( error, "error on FT_Set_Char_Size, code - ", error );
 
-    FT_Set_Transform( (FT_Face)(m_rface), &matrix, NULL );
+    FT_Set_Transform( reinterpret_cast<FT_Face>(m_rface), &matrix, NULL );
 
-    FT_Size_Metrics metrics = ((FT_Face)(m_rface))->size->metrics; 
-    m_ascender  = (float)(metrics.ascender >> 6) / 100.0f;
-    m_descender = (float)(metrics.descender >> 6) / 100.0f;
-    m_height    = (float)(metrics.height >> 6) / 100.0f;
+    FT_Size_Metrics metrics = reinterpret_cast<FT_Face>(m_rface)->size->metrics;
+    m_ascender  = static_cast<float>(metrics.ascender >> 6) / 100.0f;
+    m_descender = static_cast<float>(metrics.descender >> 6) / 100.0f;
+    m_height    = static_cast<float>(metrics.height >> 6) / 100.0f;
     m_linegap   = m_height - m_ascender + m_descender; 
 }
@@ -100,7 +100,7 @@
 bool texture_font::load_glyphs( string_view codes )
 {
-	FT_Face face = (FT_Face)(m_rface);
+	FT_Face face = reinterpret_cast<FT_Face>( m_rface );
 	size_t depth = m_atlas->get_depth();
-	ivec2 asize  = m_atlas->get_size();
+	vec2 asize   = vec2( m_atlas->get_size() );
 	FT_Int32 flags = 0; 
 	flags |= FT_LOAD_RENDER; 
@@ -116,9 +116,9 @@
 	if( m_atlas->get_depth() >= 3 )
 	{
-		FT_Library_SetLcdFilter( (FT_Library)(m_rlibrary), FT_LCD_FILTER_LIGHT );
+		FT_Library_SetLcdFilter( reinterpret_cast<FT_Library>( m_rlibrary ), FT_LCD_FILTER_LIGHT );
 		flags |= FT_LOAD_TARGET_LCD;
 		if ( m_filtering )
 		{
-			FT_Library_SetLcdFilterWeights( (FT_Library)(m_rlibrary), m_lcd_weights );
+			FT_Library_SetLcdFilterWeights( reinterpret_cast<FT_Library>( m_rlibrary ), m_lcd_weights );
 		}
 	} 
@@ -137,5 +137,5 @@
 		int ft_glyph_top    = slot->bitmap_top;
 		int ft_glyph_left   = slot->bitmap_left;
-		int reg_width       = ft_bitmap_width / (depth > 3 ? 3 : (int)depth);
+		int reg_width       = ft_bitmap_width / (depth > 3 ? 3 : int( depth ) );
 
 		ivec2 gsize( reg_width + 1, ft_bitmap_rows + 1 ); 
@@ -161,17 +161,16 @@
 		}
 
-		m_glyphs[ c ] = texture_glyph();
-		texture_glyph* g = &(m_glyphs.find( c )->second);
+		texture_glyph* g = &( m_glyphs[c] );
 
 		g->charcode = c;
 		g->size     = gsize;
 		g->offset   = ivec2( ft_glyph_left, ft_glyph_top );
-		g->tl       = vec2( r.pos.x/(float)asize.x, r.pos.y/(float)asize.y );
-		g->br       = vec2( ( r.pos.x + gsize.x )/(float)asize.x, (r.pos.y + gsize.y )/(float)asize.y );
+		g->tl       = vec2( r.pos ) / asize;
+		g->br       = vec2( r.pos + gsize ) / asize;
 
 		// Discard hinting to get advance
 		FT_Load_Glyph( face, glyph_index, FT_LOAD_RENDER | FT_LOAD_NO_HINTING);
 		slot = face->glyph;
-		g->advance = ivec2( slot->advance.x/64.0, slot->advance.y/64.0 );
+		g->advance = ivec2( slot->advance.x/64.0f, slot->advance.y/64.0f );
 	}
 	generate_kerning();
@@ -181,6 +180,6 @@
 texture_font::~texture_font()
 {
-	if ( m_rface )    FT_Done_Face( (FT_Face)(m_rface) );
-	if ( m_rlibrary ) FT_Done_FreeType( (FT_Library)(m_rlibrary) );
+	if ( m_rface )    FT_Done_Face( reinterpret_cast<FT_Face>( m_rface ) );
+	if ( m_rlibrary ) FT_Done_FreeType( reinterpret_cast<FT_Library>( m_rlibrary ) );
 }
 
