Index: /trunk/ab5.0/abdev/BasicCompiler_Common/VariableOpe.cpp
===================================================================
--- /trunk/ab5.0/abdev/BasicCompiler_Common/VariableOpe.cpp	(revision 627)
+++ /trunk/ab5.0/abdev/BasicCompiler_Common/VariableOpe.cpp	(revision 628)
@@ -849,6 +849,15 @@
 		}
 
-		if( !compiler.StringToType( temporary, type ) ){
-			compiler.errorMessenger.Output(3,temporary,cp);
+		ActiveBasic::Compiler::Error::StringToTypeErrorCode::EnumType result = compiler.StringToTypeEx( temporary, type, true );
+		if( result != ActiveBasic::Compiler::Error::StringToTypeErrorCode::Successful )
+		{
+			if( result == ActiveBasic::Compiler::Error::StringToTypeErrorCode::FailedResolveGenericType )
+			{
+				compiler.errorMessenger.Output(143,temporary,cp);
+			}
+			else
+			{
+				compiler.errorMessenger.Output(3,temporary,cp);
+			}
 			return false;
 		}
Index: /trunk/ab5.0/abdev/BasicCompiler_Common/include/Compiler.h
===================================================================
--- /trunk/ab5.0/abdev/BasicCompiler_Common/include/Compiler.h	(revision 627)
+++ /trunk/ab5.0/abdev/BasicCompiler_Common/include/Compiler.h	(revision 628)
@@ -184,4 +184,5 @@
 
 
+	ActiveBasic::Compiler::Error::StringToTypeErrorCode::EnumType StringToTypeEx( const std::string &typeName, Type &type, bool isResolveGenerics = false );
 	bool StringToType( const std::string &typeName, Type &type );
 	const std::string TypeToString( const Type &type );
Index: /trunk/ab5.0/abdev/BasicCompiler_Common/include/ErrorCode.h
===================================================================
--- /trunk/ab5.0/abdev/BasicCompiler_Common/include/ErrorCode.h	(revision 628)
+++ /trunk/ab5.0/abdev/BasicCompiler_Common/include/ErrorCode.h	(revision 628)
@@ -0,0 +1,18 @@
+#pragma once
+
+namespace ActiveBasic{ namespace Compiler{ namespace Error{
+
+
+struct StringToTypeErrorCode
+{
+	enum EnumType
+	{
+		Successful = 0,				// 成功
+		FailedResolveGenericType,	// ジェネリック型の型解決に失敗
+		NotfoundGenericClass,		// ジェネリッククラスを発見できなかった
+		NotfoundType,				// 型を発見できなかった
+	};
+};
+
+
+}}}
Index: /trunk/ab5.0/abdev/BasicCompiler_Common/src/Compiler.cpp
===================================================================
--- /trunk/ab5.0/abdev/BasicCompiler_Common/src/Compiler.cpp	(revision 627)
+++ /trunk/ab5.0/abdev/BasicCompiler_Common/src/Compiler.cpp	(revision 628)
@@ -14,5 +14,6 @@
 }
 
-bool Compiler::StringToType( const std::string &typeName, Type &type ){
+ActiveBasic::Compiler::Error::StringToTypeErrorCode::EnumType Compiler::StringToTypeEx( const std::string &typeName, Type &type, bool isResolveGenerics )
+{
 	type.SetIndex( -1 );
 
@@ -35,5 +36,5 @@
 		if( !pGenericClass )
 		{
-			return false;
+			return ActiveBasic::Compiler::Error::StringToTypeErrorCode::NotfoundGenericClass;
 		}
 
@@ -70,5 +71,5 @@
 		type.SetActualGenericTypes( genericTypes );
 
-		return true;
+		return ActiveBasic::Compiler::Error::StringToTypeErrorCode::Successful;
 	}
 
@@ -102,37 +103,42 @@
 			type.SetBasicType( DEF_PTR_PROC );
 			type.SetIndex( this->GetObjectModule().meta.GetProcPointers().size() - 1 );
-			return true;
+			return ActiveBasic::Compiler::Error::StringToTypeErrorCode::Successful;
 		}
 
 		const std::string &nextTypeName = typeName.substr( 1 );
 
-		if( !StringToType( nextTypeName, type ) ){
-			return false;
+		ActiveBasic::Compiler::Error::StringToTypeErrorCode::EnumType result = StringToTypeEx( nextTypeName, type, isResolveGenerics );
+		if( result != ActiveBasic::Compiler::Error::StringToTypeErrorCode::Successful )
+		{
+			return result;
 		}
 
 		type.PtrLevelUp();
 
-		return true;
+		return ActiveBasic::Compiler::Error::StringToTypeErrorCode::Successful;
 	}
 
 	{
 		int basicType;
-		if( Type::StringToBasicType( typeName, basicType ) ){
+		if( Type::StringToBasicType( typeName, basicType ) )
+		{
 			// 基本型だったとき
 			type.SetBasicType( basicType );
-			return true;
+			return ActiveBasic::Compiler::Error::StringToTypeErrorCode::Successful;
 		}
 	}
 
 	// Object型だったとき
-	if( typeName == "Object" ){
+	if( typeName == "Object" )
+	{
 		type.SetType( DEF_OBJECT, this->GetObjectModule().meta.GetClasses().GetObjectClassPtr() );
-		return true;
+		return ActiveBasic::Compiler::Error::StringToTypeErrorCode::Successful;
 	}
 
 	// String型だったとき
-	if( typeName == "String" ){
+	if( typeName == "String" )
+	{
 		type.SetType( DEF_OBJECT, this->GetObjectModule().meta.GetClasses().GetStringClassPtr() );
-		return true;
+		return ActiveBasic::Compiler::Error::StringToTypeErrorCode::Successful;
 	}
 
@@ -142,20 +148,34 @@
 	////////////////////
 	int i=this->GetObjectModule().meta.GetTypeDefs().GetIndex( LexicalAnalyzer::FullNameToSymbol( typeName ) );
-	if(i!=-1){
+	if(i!=-1)
+	{
 		type = this->GetObjectModule().meta.GetTypeDefs()[i].GetBaseType();
-		return true;
+		return ActiveBasic::Compiler::Error::StringToTypeErrorCode::Successful;
 	}
 
 	//クラス
 	const CClass *pobj_c = this->GetObjectModule().meta.GetClasses().FindEx( LexicalAnalyzer::FullNameToSymbol( typeName ) );
-	if(pobj_c){
-		if( pobj_c->IsStructure() ){
+	if(pobj_c)
+	{
+		if( isResolveGenerics )
+		{
+			if( pobj_c->IsGeneric() )
+			{
+				// ジェネリッククラスの場合
+				trace( "型解決されていない" );
+				return ActiveBasic::Compiler::Error::StringToTypeErrorCode::FailedResolveGenericType;
+			}
+		}
+
+		if( pobj_c->IsStructure() )
+		{
 			type.SetBasicType( DEF_STRUCT );
 		}
-		else{
+		else
+		{
 			type.SetBasicType( DEF_OBJECT );
 		}
 		type.SetClassPtr( pobj_c );
-		return true;
+		return ActiveBasic::Compiler::Error::StringToTypeErrorCode::Successful;
 	}
 
@@ -176,5 +196,5 @@
 			type.SetFormalTypeName( typeName );
 			type.SetFormalTypeIndex( formalTypeIndex );
-			return true;
+			return ActiveBasic::Compiler::Error::StringToTypeErrorCode::Successful;
 		}
 	}
@@ -183,5 +203,10 @@
 	/////////////////////////////////////////////////////////
 
-	return false;
+	return ActiveBasic::Compiler::Error::StringToTypeErrorCode::NotfoundType;
+}
+
+bool Compiler::StringToType( const std::string &typeName, Type &type )
+{
+	return ( StringToTypeEx( typeName, type, false ) == ActiveBasic::Compiler::Error::StringToTypeErrorCode::Successful );
 }
 
Index: /trunk/ab5.0/abdev/BasicCompiler_Common/src/Messenger.cpp
===================================================================
--- /trunk/ab5.0/abdev/BasicCompiler_Common/src/Messenger.cpp	(revision 627)
+++ /trunk/ab5.0/abdev/BasicCompiler_Common/src/Messenger.cpp	(revision 628)
@@ -76,5 +76,5 @@
 		for( int i3=0; ; i3++ )
 		{
-			if( !IsVariableChar( tempKeyWord[i3] ) || tempKeyWord[i3] == '.' )
+			if( !IsVariableChar( tempKeyWord[i3] ) )
 			{
 				temporary[i3] = 0;
@@ -249,4 +249,5 @@
 	if(errorCode==141) lstrcpy(msg,"Blittable修飾子をクラス以外の型に指定することはできません。");
 	if(errorCode==142) lstrcpy(msg,"不正なThis参照です。");
+	if(errorCode==143) sprintf(msg,"\"%s\" ジェネリクス型に型パラメータが指定されていません。",tempKeyWord);
 
 	//Enum関連
Index: /trunk/ab5.0/abdev/compiler_x64/compiler_x64.vcproj
===================================================================
--- /trunk/ab5.0/abdev/compiler_x64/compiler_x64.vcproj	(revision 627)
+++ /trunk/ab5.0/abdev/compiler_x64/compiler_x64.vcproj	(revision 628)
@@ -326,4 +326,8 @@
 				</File>
 				<File
+					RelativePath="..\BasicCompiler_Common\include\ErrorCode.h"
+					>
+				</File>
+				<File
 					RelativePath="..\BasicCompiler_Common\include\LexicalAnalyzer.h"
 					>
Index: /trunk/ab5.0/abdev/compiler_x64/stdafx.h
===================================================================
--- /trunk/ab5.0/abdev/compiler_x64/stdafx.h	(revision 627)
+++ /trunk/ab5.0/abdev/compiler_x64/stdafx.h	(revision 628)
@@ -48,4 +48,5 @@
 #include <CodeGenerator.h>
 #include <Messenger.h>
+#include <ErrorCode.h>
 #include <Linker.h>
 #include <Compiler.h>
Index: /trunk/ab5.0/abdev/compiler_x86/compiler_x86.vcproj
===================================================================
--- /trunk/ab5.0/abdev/compiler_x86/compiler_x86.vcproj	(revision 627)
+++ /trunk/ab5.0/abdev/compiler_x86/compiler_x86.vcproj	(revision 628)
@@ -1382,4 +1382,8 @@
 				</File>
 				<File
+					RelativePath="..\BasicCompiler_Common\include\ErrorCode.h"
+					>
+				</File>
+				<File
 					RelativePath="..\BasicCompiler_Common\include\LexicalAnalyzer.h"
 					>
Index: /trunk/ab5.0/abdev/compiler_x86/stdafx.h
===================================================================
--- /trunk/ab5.0/abdev/compiler_x86/stdafx.h	(revision 627)
+++ /trunk/ab5.0/abdev/compiler_x86/stdafx.h	(revision 628)
@@ -48,4 +48,5 @@
 #include <CodeGenerator.h>
 #include <Messenger.h>
+#include <ErrorCode.h>
 #include <Linker.h>
 #include <Compiler.h>
