Index: BasicCompiler_Common/ParamImpl.cpp
===================================================================
--- BasicCompiler_Common/ParamImpl.cpp	(revision 110)
+++ BasicCompiler_Common/ParamImpl.cpp	(revision 111)
@@ -8,11 +8,12 @@
 
 #define OVERLOAD_MIN_LEVEL 0
-#define OVERLOAD_MAX_LEVEL 5
+#define OVERLOAD_MAX_LEVEL 6
 #define OVERLOAD_LEVEL0 0		// 型調整なし。厳密に等しい
 #define OVERLOAD_LEVEL1 1		// 型調整なし。レベル1以上はオブジェクトの場合は派生関係を考慮
-#define OVERLOAD_LEVEL2 2		// 型調整なし。整数型/実数型レベルでの同一性チェック
-#define OVERLOAD_LEVEL3 3		// 型調整あり。厳密に等しい
-#define OVERLOAD_LEVEL4 4		// 型調整あり。整数型/実数型レベルでの同一性チェック
-#define OVERLOAD_LEVEL5 5		// 型調整あり。数値型/クラス型レベルでの同一性チェック
+#define OVERLOAD_LEVEL2 2		// 型調整なし。整数型/実数型レベルでの同一性チェック（サイズ照合あり）
+#define OVERLOAD_LEVEL3 3		// 型調整なし。整数型/実数型レベルでの同一性チェック
+#define OVERLOAD_LEVEL4 4		// 型調整あり。厳密に等しい
+#define OVERLOAD_LEVEL5 5		// 型調整あり。整数型/実数型レベルでの同一性チェック
+#define OVERLOAD_LEVEL6 6		// 型調整あり。数値型/クラス型レベルでの同一性チェック
 
 ParamImpl::ParamImpl(const char *buffer):
@@ -128,5 +129,5 @@
 
 			NumOpe_GetType(Parms[i],
-				( level <= OVERLOAD_LEVEL2 )? nullParam : param,
+				( level <= OVERLOAD_LEVEL3 )? nullParam : param,
 				argType);
 		}
@@ -136,8 +137,14 @@
 
 		if(argType.GetBasicType()!=param.GetBasicType()){
-			if( level == OVERLOAD_LEVEL0 || level == OVERLOAD_LEVEL1 || level==OVERLOAD_LEVEL3 ){
+			if( level == OVERLOAD_LEVEL0 || level == OVERLOAD_LEVEL1 || level==OVERLOAD_LEVEL4 ){
 				return false;
 			}
-			else if( level == OVERLOAD_LEVEL2 || level==OVERLOAD_LEVEL4){
+			else if( level == OVERLOAD_LEVEL2 ){
+				if( !(argType.IsWhole() && param.IsWhole() && argType.GetBasicSize() == param.GetBasicSize() ) ){
+					// サイズ違い
+					return false;
+				}
+			}
+			else if( level == OVERLOAD_LEVEL3 || level==OVERLOAD_LEVEL5){
 				if(!(
 					argType.IsWhole()&&param.IsWhole()||
@@ -147,5 +154,5 @@
 				}
 			}
-			else if(level==OVERLOAD_LEVEL5){
+			else if(level==OVERLOAD_LEVEL6){
 				if(argType.IsObject()||param.IsObject()) return false;
 			}
