Index: trunk/ab5.0/abdev/ab_common/include/Lexical/Namespace.h
===================================================================
--- trunk/ab5.0/abdev/ab_common/include/Lexical/Namespace.h	(revision 668)
+++ trunk/ab5.0/abdev/ab_common/include/Lexical/Namespace.h	(revision 669)
@@ -20,4 +20,6 @@
 	NamespaceScopes( const std::string &namespaceStr );
 	~NamespaceScopes(){}
+
+	NamespaceScopes operator+ ( const NamespaceScopes &namespaceScopes ) const;
 
 	std::string ToString() const
@@ -50,11 +52,5 @@
 
 	// 等しいかをチェック
-	bool IsEqual( const NamespaceScopes &namespaceScopes ) const
-	{
-		if( ToString() == namespaceScopes.ToString() ){
-			return true;
-		}
-		return false;
-	}
+	bool IsEqual( const NamespaceScopes &namespaceScopes ) const;
 
 	// 所属しているかをチェック
Index: trunk/ab5.0/abdev/ab_common/include/Lexical/NamespaceSupporter.h
===================================================================
--- trunk/ab5.0/abdev/ab_common/include/Lexical/NamespaceSupporter.h	(revision 668)
+++ trunk/ab5.0/abdev/ab_common/include/Lexical/NamespaceSupporter.h	(revision 669)
@@ -90,34 +90,5 @@
 
 	// 指定された名前空間が同一エリアと見なされるかどうかをチェック
-	bool IsSameAreaNamespace( const NamespaceScopes &baseNamespaceScopes, const NamespaceScopes &entryNamespaceScopes ) const
-	{
-		if( entryNamespaceScopes.size() )
-		{
-			if( IsCoverd( baseNamespaceScopes, entryNamespaceScopes ) )
-			{
-				// 包括しているときは同一と見なす
-				return true;
-			}
-		}
-		else{
-			if( baseNamespaceScopes.size() )
-			{
-				// 名前空間の判断が必要なとき
-				if( this->importedNamespaces.IsImported( baseNamespaceScopes )
-					|| IsLiving( baseNamespaceScopes ) )
-				{
-					// Using指定があるとき
-					// または
-					// 指定された名前空間が現在の名前空間スコープと同一のとき
-					return true;
-				}
-			}
-			else{
-				return true;
-			}
-		}
-
-		return false;
-	}
+	bool IsSameAreaNamespace( const NamespaceScopes &baseNamespaceScopes, const NamespaceScopes &entryNamespaceScopes ) const;
 };
 
Index: trunk/ab5.0/abdev/ab_common/src/Lexical/Namespace.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/Namespace.cpp	(revision 668)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/Namespace.cpp	(revision 669)
@@ -24,4 +24,32 @@
 		i = i2 + 1;
 	}
+}
+
+NamespaceScopes NamespaceScopes::operator+ ( const NamespaceScopes &namespaceScopes ) const
+{
+	NamespaceScopes result = *this;
+	BOOST_FOREACH( const std::string &name, namespaceScopes )
+	{
+		result.push_back( name );
+	}
+	return result;
+}
+
+bool NamespaceScopes::IsEqual( const NamespaceScopes &namespaceScopes ) const
+{
+	if( this->size() != namespaceScopes.size() )
+	{
+		return false;
+	}
+
+	for( int i=static_cast<int>(this->size()-1); i>=0; i-- )
+	{
+		if( (*this)[i] != namespaceScopes[i] )
+		{
+			return false;
+		}
+	}
+
+	return true;
 }
 
Index: trunk/ab5.0/abdev/ab_common/src/Lexical/NamespaceSupporter.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/NamespaceSupporter.cpp	(revision 668)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/NamespaceSupporter.cpp	(revision 669)
@@ -21,2 +21,33 @@
 	return ImportsNamespace( namespaceScopes );
 }
+
+bool NamespaceSupporter::IsSameAreaNamespace( const NamespaceScopes &baseNamespaceScopes, const NamespaceScopes &entryNamespaceScopes ) const
+{
+	if( entryNamespaceScopes.size() )
+	{
+		if( IsCoverd( baseNamespaceScopes, entryNamespaceScopes ) )
+		{
+			// 包括しているときは同一と見なす
+			return true;
+		}
+	}
+	else{
+		if( baseNamespaceScopes.size() )
+		{
+			// 名前空間の判断が必要なとき
+			if( this->importedNamespaces.IsImported( baseNamespaceScopes )
+				|| IsLiving( baseNamespaceScopes ) )
+			{
+				// Using指定があるとき
+				// または
+				// 指定された名前空間が現在の名前空間スコープと同一のとき
+				return true;
+			}
+		}
+		else{
+			return true;
+		}
+	}
+
+	return false;
+}
