Index: branches/egtra/ab5.0/abdev/ab_common/include/Lexical/Type.h
===================================================================
--- branches/egtra/ab5.0/abdev/ab_common/include/Lexical/Type.h	(revision 774)
+++ branches/egtra/ab5.0/abdev/ab_common/include/Lexical/Type.h	(revision 816)
@@ -66,10 +66,19 @@
 	  index( (LONG_PTR)&objClass ){}
 
-	Type( const Type &type )
-		: basicType( type.basicType )
-		, index( type.index )
-		, actualGenericTypes( type.actualGenericTypes )
-		, formalTypeName( type.formalTypeName )
-		, formalTypeIndex( type.formalTypeIndex )
+	Type(Type&& type)
+		: basicType(std::move(type.basicType))
+		, index(std::move(type.index))
+		, actualGenericTypes(std::move(type.actualGenericTypes))
+		, formalTypeName(std::move(type.formalTypeName))
+		, formalTypeIndex(std::move(type.formalTypeIndex))
+	{
+	}
+
+	Type(Type const& type)
+		: basicType(type.basicType)
+		, index(type.index)
+		, actualGenericTypes(type.actualGenericTypes)
+		, formalTypeName(type.formalTypeName)
+		, formalTypeIndex(type.formalTypeIndex)
 	{
 	}
@@ -77,14 +86,20 @@
 	~Type();
 
-	void operator= ( const Type &type )
-	{
-		basicType = type.basicType;
-		index = type.index;
-		actualGenericTypes = type.actualGenericTypes;
-		formalTypeName = type.formalTypeName;
-		formalTypeIndex = type.formalTypeIndex;
-	}
-
-	__inline int GetBasicType() const
+	Type& operator =(Type&& type)
+	{
+		basicType = std::move(type.basicType);
+		index = std::move(type.index);
+		actualGenericTypes = std::move(type.actualGenericTypes);
+		formalTypeName = std::move(type.formalTypeName);
+		formalTypeIndex = std::move(type.formalTypeIndex);
+		return *this;
+	}
+
+	Type& operator =(Type const& type)
+	{
+		return *this = Type(type);
+	}
+
+	inline int GetBasicType() const
 	{
 		return basicType;
@@ -253,4 +268,19 @@
 
 public:
+	Types() {}
+	Types(Types&& y) : std::vector<Type>(std::move(y)) {}
+	Types(Types const& y) : std::vector<Type>(y) {}
+
+	Types& operator =(Types&& y)
+	{
+		std::vector<Type>::operator =(std::move(y));
+		return *this;
+	}
+
+	Types& operator =(Types const& y)
+	{
+		return *this = std::move(Types(y));
+	}
+
 	bool IsEquals( const Types &Types ) const;
 };
@@ -281,12 +311,38 @@
 
 public:
-	GenericType( const std::string &name, const Type &type )
-		: name( name )
-		, type( type )
-	{
-	}
+	GenericType( std::string name, Type type )
+		: name(std::move(name))
+		, type(std::move(type))
+	{
+	}
+
 	GenericType()
 	{
 	}
+
+	GenericType(GenericType&& y)
+		: name(std::move(y.name))
+		, type(std::move(y.type))
+	{
+	}
+
+	GenericType(GenericType const& y)
+		: name(y.name)
+		, type(y.type)
+	{
+	}
+
+	GenericType& operator =(GenericType&& y)
+	{
+		name = std::move(y.name);
+		type = std::move(y.type);
+		return *this;
+	}
+
+	GenericType& operator =(GenericType const& y)
+	{
+		return *this = std::move(GenericType(y));
+	}
+
 	~GenericType()
 	{
@@ -329,7 +385,35 @@
 	{
 	}
+
 	BlittableType()
-	{
-	}
+		: basicType()
+		, pClass()
+	{
+	}
+
+	BlittableType(BlittableType&& y)
+		: basicType(std::move(y.basicType))
+		, pClass(std::move(y.pClass))
+	{
+	}
+
+	BlittableType(BlittableType const& y)
+		: basicType(y.basicType)
+		, pClass(y.pClass)
+	{
+	}
+
+	BlittableType& operator =(BlittableType&& y)
+	{
+		basicType = std::move(y.basicType);
+		pClass = std::move(y.pClass);
+		return *this;
+	}
+
+	BlittableType& operator =(BlittableType const& y)
+	{
+		return *this = std::move(BlittableType(y));
+	}
+
 	const Type &GetBasicType() const
 	{
@@ -344,4 +428,5 @@
 	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
+
 class BlittableTypes : public std::vector<BlittableType>
 {
@@ -358,4 +443,17 @@
 
 public:
+	BlittableTypes() {}
+	BlittableTypes(BlittableTypes&& y) : std::vector<BlittableType>(std::move(y)) {}
+	BlittableTypes(BlittableTypes const& y) : std::vector<BlittableType>(y) {}
+	BlittableTypes& operator =(BlittableTypes&& y)
+	{
+		std::vector<BlittableType>::operator =(std::move(y));
+		return *this;
+	}
+	BlittableTypes& operator =(BlittableTypes const& y)
+	{
+		return *this = std::move(BlittableTypes(y));
+	}
+
 	bool IsExist( Type type ) const
 	{
