Index: src/ResolvExpr/CommonType.cc
===================================================================
--- src/ResolvExpr/CommonType.cc	(revision 0e66857b99034170c3e5555f271044ed10f86624)
+++ src/ResolvExpr/CommonType.cc	(revision 2782f38a71eacbc10ee2e26fb9a636cb17b6ccd4)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 06:59:27 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Sep 25 15:18:17 2017
-// Update Count     : 9
+// Last Modified On : Fri Feb  8 09:30:15 2019
+// Update Count     : 17
 //
 
@@ -175,36 +175,322 @@
 		return result;
 	}
-
+#if 0
+	#define BT BasicType::
 	static const BasicType::Kind combinedType[][ BasicType::NUMBER_OF_BASIC_TYPES ] =
 	{
 /* 		Bool		Char	SignedChar	UnsignedChar	ShortSignedInt	ShortUnsignedInt	SignedInt	UnsignedInt	LongSignedInt	LongUnsignedInt	LongLongSignedInt	LongLongUnsignedInt	Float	Double	LongDouble	FloatComplex	DoubleComplex	LongDoubleComplex	FloatImaginary	DoubleImaginary	LongDoubleImaginary   SignedInt128   UnsignedInt128   Float80   Float128 */
-		/* Bool */ 	{ BasicType::Bool,		BasicType::Char,	BasicType::SignedChar,	BasicType::UnsignedChar,	BasicType::ShortSignedInt,	BasicType::ShortUnsignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, BasicType::Float80, BasicType::Float128 },
-		/* Char */ 	{ BasicType::Char,		BasicType::Char,	BasicType::UnsignedChar,	BasicType::UnsignedChar,	BasicType::ShortSignedInt,	BasicType::ShortUnsignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, BasicType::Float80, BasicType::Float128 },
-		/* SignedChar */ 	{ BasicType::SignedChar,	BasicType::UnsignedChar,	BasicType::SignedChar,	BasicType::UnsignedChar,	BasicType::ShortSignedInt,	BasicType::ShortUnsignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, BasicType::Float80, BasicType::Float128 },
-		/* UnsignedChar */ 	{ BasicType::UnsignedChar,	BasicType::UnsignedChar,	BasicType::UnsignedChar,	BasicType::UnsignedChar,	BasicType::ShortSignedInt,	BasicType::ShortUnsignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, BasicType::Float80, BasicType::Float128 },
-		/* ShortSignedInt */ 	{ BasicType::ShortSignedInt,	BasicType::ShortSignedInt,	BasicType::ShortSignedInt,	BasicType::ShortSignedInt,	BasicType::ShortSignedInt,	BasicType::ShortUnsignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, BasicType::Float80, BasicType::Float128 },
-		/* ShortUnsignedInt */ 	{ BasicType::ShortUnsignedInt,	BasicType::ShortUnsignedInt,	BasicType::ShortUnsignedInt,	BasicType::ShortUnsignedInt,	BasicType::ShortUnsignedInt,	BasicType::ShortUnsignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, BasicType::Float80, BasicType::Float128 },
-		/* SignedInt */ 	{ BasicType::SignedInt,		BasicType::SignedInt,	BasicType::SignedInt,	BasicType::SignedInt,	BasicType::SignedInt,	BasicType::SignedInt,	BasicType::SignedInt,	BasicType::UnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, BasicType::Float80, BasicType::Float128 },
-		/* UnsignedInt */ 	{ BasicType::UnsignedInt,		BasicType::UnsignedInt,	BasicType::UnsignedInt,	BasicType::UnsignedInt,	BasicType::UnsignedInt,	BasicType::UnsignedInt,	BasicType::UnsignedInt,	BasicType::UnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, BasicType::Float80, BasicType::Float128 },
-		/* LongSignedInt */ 	{ BasicType::LongSignedInt,		BasicType::LongSignedInt,	BasicType::LongSignedInt,	BasicType::LongSignedInt,	BasicType::LongSignedInt,	BasicType::LongSignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongSignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, BasicType::Float80, BasicType::Float128 },
-		/* LongUnsignedInt */ 	{ BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongUnsignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, BasicType::Float80, BasicType::Float128 },
-		/* LongLongSignedInt */ 	{ BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongSignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, BasicType::Float80, BasicType::Float128 },
-		/* LongLongUnsignedInt */ 	{ BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::LongLongUnsignedInt,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, BasicType::Float80, BasicType::Float128 },
-		/* Float */ 	{ BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::Float,	BasicType::Float, BasicType::Float80, BasicType::Float128 },
-		/* Double */ 	{ BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::Double,	BasicType::LongDouble,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::Double,	BasicType::Double, BasicType::Float80, BasicType::Float128 },
-		/* LongDouble */ 	{ BasicType::LongDouble,		BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDouble,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDouble,	BasicType::LongDouble, BasicType::BasicType::LongDouble, BasicType::Float128 },
-		/* FloatComplex */ 	{ BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::FloatComplex, BasicType::LongDoubleComplex, BasicType::LongDoubleComplex, },
-		/* DoubleComplex */ 	{ BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex, BasicType::LongDoubleComplex, BasicType::LongDoubleComplex },
-		/* LongDoubleComplex */ 	{ BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex, BasicType::LongDoubleComplex, BasicType::LongDoubleComplex, },
-		/* FloatImaginary */ 	{ BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatImaginary,	BasicType::DoubleImaginary,	BasicType::LongDoubleImaginary,	BasicType::FloatImaginary,	BasicType::FloatImaginary, BasicType::LongDoubleImaginary, BasicType::LongDoubleImaginary, },
-		/* DoubleImaginary */ 	{ BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::DoubleComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::DoubleImaginary,	BasicType::DoubleImaginary,	BasicType::LongDoubleImaginary,	BasicType::DoubleImaginary,	BasicType::DoubleImaginary, BasicType::LongDoubleImaginary, BasicType::LongDoubleImaginary, },
-		/* LongDoubleImaginary */ 	{ BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleImaginary,	BasicType::LongDoubleImaginary,	BasicType::LongDoubleImaginary, BasicType::LongDoubleImaginary, BasicType::LongDoubleImaginary, },
-		/* SignedInt128 */ 	{ BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::SignedInt128,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::SignedInt128,	BasicType::UnsignedInt128, BasicType::Float80, BasicType::Float128, },
-		/* UnsignedInt128 */ 	{ BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128,	BasicType::Float,	BasicType::Double,	BasicType::LongDouble,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::FloatComplex,	BasicType::DoubleComplex,	BasicType::LongDoubleComplex,	BasicType::UnsignedInt128,	BasicType::UnsignedInt128, BasicType::Float80, BasicType::Float128, },
-		/* Float80 */ 	{ BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::Float80,	BasicType::LongDouble,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::Float80,	BasicType::Float80, BasicType::Float80, BasicType::Float128 },
-		/* Float128 */ 	{ BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::Float128,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::LongDoubleComplex,	BasicType::Float128,	BasicType::Float128, BasicType::Float128, BasicType::Float128 },
+		/* Bool */ 	{ BT Bool,		BT Char,	BT SignedChar,	BT UnsignedChar,	BT ShortSignedInt,	BT ShortUnsignedInt,	BT SignedInt,	BT UnsignedInt,	BT LongSignedInt,	BT LongUnsignedInt,	BT LongLongSignedInt,	BT LongLongUnsignedInt,	BT Float,	BT Double,	BT LongDouble,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT SignedInt128,	BT UnsignedInt128, BT Float80, BT Float128, BT _Float16, BT _Float32, BT _Float32x, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT _Float16Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* Char */ 	{ BT Char,		BT Char,	BT UnsignedChar,	BT UnsignedChar,	BT ShortSignedInt,	BT ShortUnsignedInt,	BT SignedInt,	BT UnsignedInt,	BT LongSignedInt,	BT LongUnsignedInt,	BT LongLongSignedInt,	BT LongLongUnsignedInt,	BT Float,	BT Double,	BT LongDouble,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT SignedInt128,	BT UnsignedInt128, BT Float80, BT Float128, BT _Float16, BT _Float32, BT _Float32x, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT _Float16Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* SignedChar */ 	{ BT SignedChar,	BT UnsignedChar,	BT SignedChar,	BT UnsignedChar,	BT ShortSignedInt,	BT ShortUnsignedInt,	BT SignedInt,	BT UnsignedInt,	BT LongSignedInt,	BT LongUnsignedInt,	BT LongLongSignedInt,	BT LongLongUnsignedInt,	BT Float,	BT Double,	BT LongDouble,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT SignedInt128,	BT UnsignedInt128, BT Float80, BT Float128, BT _Float16, BT _Float32, BT _Float32x, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT _Float16Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* UnsignedChar */ 	{ BT UnsignedChar,	BT UnsignedChar,	BT UnsignedChar,	BT UnsignedChar,	BT ShortSignedInt,	BT ShortUnsignedInt,	BT SignedInt,	BT UnsignedInt,	BT LongSignedInt,	BT LongUnsignedInt,	BT LongLongSignedInt,	BT LongLongUnsignedInt,	BT Float,	BT Double,	BT LongDouble,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT SignedInt128,	BT UnsignedInt128, BT Float80, BT Float128, BT _Float16, BT _Float32, BT _Float32x, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT _Float16Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* ShortSignedInt */ 	{ BT ShortSignedInt,	BT ShortSignedInt,	BT ShortSignedInt,	BT ShortSignedInt,	BT ShortSignedInt,	BT ShortUnsignedInt,	BT SignedInt,	BT UnsignedInt,	BT LongSignedInt,	BT LongUnsignedInt,	BT LongLongSignedInt,	BT LongLongUnsignedInt,	BT Float,	BT Double,	BT LongDouble,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT SignedInt128,	BT UnsignedInt128, BT Float80, BT Float128, BT _Float16, BT _Float32, BT _Float32x, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT _Float16Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* ShortUnsignedInt */ 	{ BT ShortUnsignedInt,	BT ShortUnsignedInt,	BT ShortUnsignedInt,	BT ShortUnsignedInt,	BT ShortUnsignedInt,	BT ShortUnsignedInt,	BT SignedInt,	BT UnsignedInt,	BT LongSignedInt,	BT LongUnsignedInt,	BT LongLongSignedInt,	BT LongLongUnsignedInt,	BT Float,	BT Double,	BT LongDouble,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT SignedInt128,	BT UnsignedInt128, BT Float80, BT Float128, BT _Float16, BT _Float32, BT _Float32x, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT _Float16Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* SignedInt */ 	{ BT SignedInt,		BT SignedInt,	BT SignedInt,	BT SignedInt,	BT SignedInt,	BT SignedInt,	BT SignedInt,	BT UnsignedInt,	BT LongSignedInt,	BT LongUnsignedInt,	BT LongLongSignedInt,	BT LongLongUnsignedInt,	BT Float,	BT Double,	BT LongDouble,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT SignedInt128,	BT UnsignedInt128, BT Float80, BT Float128, BT _Float16, BT _Float32, BT _Float32x, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT _Float16Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* UnsignedInt */ 	{ BT UnsignedInt,		BT UnsignedInt,	BT UnsignedInt,	BT UnsignedInt,	BT UnsignedInt,	BT UnsignedInt,	BT UnsignedInt,	BT UnsignedInt,	BT LongUnsignedInt,	BT LongUnsignedInt,	BT LongLongSignedInt,	BT LongLongUnsignedInt,	BT Float,	BT Double,	BT LongDouble,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT SignedInt128,	BT UnsignedInt128, BT Float80, BT Float128, BT _Float16, BT _Float32, BT _Float32x, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT _Float16Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* LongSignedInt */ 	{ BT LongSignedInt,		BT LongSignedInt,	BT LongSignedInt,	BT LongSignedInt,	BT LongSignedInt,	BT LongSignedInt,	BT LongSignedInt,	BT LongUnsignedInt,	BT LongSignedInt,	BT LongUnsignedInt,	BT LongLongSignedInt,	BT LongLongUnsignedInt,	BT Float,	BT Double,	BT LongDouble,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT SignedInt128,	BT UnsignedInt128, BT Float80, BT Float128, BT _Float16, BT _Float32, BT _Float32x, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT _Float16Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* LongUnsignedInt */ 	{ BT LongUnsignedInt,	BT LongUnsignedInt,	BT LongUnsignedInt,	BT LongUnsignedInt,	BT LongUnsignedInt,	BT LongUnsignedInt,	BT LongUnsignedInt,	BT LongUnsignedInt,	BT LongUnsignedInt,	BT LongUnsignedInt,	BT LongLongSignedInt,	BT LongLongUnsignedInt,	BT Float,	BT Double,	BT LongDouble,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT SignedInt128,	BT UnsignedInt128, BT Float80, BT Float128, BT _Float16, BT _Float32, BT _Float32x, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT _Float16Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* LongLongSignedInt */ 	{ BT LongLongSignedInt,	BT LongLongSignedInt,	BT LongLongSignedInt,	BT LongLongSignedInt,	BT LongLongSignedInt,	BT LongLongSignedInt,	BT LongLongSignedInt,	BT LongLongSignedInt,	BT LongLongSignedInt,	BT LongLongSignedInt,	BT LongLongSignedInt,	BT LongLongUnsignedInt,	BT Float,	BT Double,	BT LongDouble,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT SignedInt128,	BT UnsignedInt128, BT Float80, BT Float128, BT _Float16, BT _Float32, BT _Float32x, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT _Float16Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* LongLongUnsignedInt */ 	{ BT LongLongUnsignedInt,	BT LongLongUnsignedInt,	BT LongLongUnsignedInt,	BT LongLongUnsignedInt,	BT LongLongUnsignedInt,	BT LongLongUnsignedInt,	BT LongLongUnsignedInt,	BT LongLongUnsignedInt,	BT LongLongUnsignedInt,	BT LongLongUnsignedInt,	BT LongLongUnsignedInt,	BT LongLongUnsignedInt,	BT Float,	BT Double,	BT LongDouble,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT SignedInt128,	BT UnsignedInt128, BT Float80, BT Float128, BT _Float16, BT _Float32, BT _Float32x, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT _Float16Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+
+		/* Float */ 	{ BT Float,	BT Float,	BT Float,	BT Float,	BT Float,	BT Float,	BT Float,	BT Float,	BT Float,	BT Float,	BT Float,	BT Float,	BT Float,	BT Double,	BT LongDouble,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT Float,	BT Float, BT Float80, BT Float128, BT Float, BT Float, BT _Float32x, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT FloatComplex, BT FloatComplex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* Double */ 	{ BT Double,	BT Double,	BT Double,	BT Double,	BT Double,	BT Double,	BT Double,	BT Double,	BT Double,	BT Double,	BT Double,	BT Double,	BT Double,	BT Double,	BT LongDouble,	BT DoubleComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT Double,	BT Double, BT Float80, BT Float128, BT Double, BT Double, BT Double, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT DoubleComplex, BT DoubleComplex, BT DoubleComplex, BT DoubleComplex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* LongDouble */ 	{ BT LongDouble,		BT LongDouble,	BT LongDouble,	BT LongDouble,	BT LongDouble,	BT LongDouble,	BT LongDouble,	BT LongDouble,	BT LongDouble,	BT LongDouble,	BT LongDouble,	BT LongDouble,	BT LongDouble,	BT LongDouble,	BT LongDouble,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDouble,	BT LongDouble, BT BT LongDouble, BT Float128, BT LongDouble, BT LongDouble, BT LongDouble, BT LongDouble, BT LongDouble, BT LongDouble, BT _Float128x, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT _Float128xComplex },
+		/* FloatComplex */ 	{ BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT FloatComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT FloatComplex, BT FloatComplex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex, BT FloatComplex, BT FloatComplex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* DoubleComplex */ 	{ BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT DoubleComplex,	BT DoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT DoubleComplex, BT DoubleComplex, BT DoubleComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex, BT DoubleComplex, BT DoubleComplex, BT DoubleComplex, BT DoubleComplex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* LongDoubleComplex */ 	{ BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT _Float128xComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT _Float128xComplex },
+		/* FloatImaginary */ 	{ BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatImaginary,	BT DoubleImaginary,	BT LongDoubleImaginary,	BT FloatImaginary,	BT FloatImaginary, BT LongDoubleImaginary, BT LongDoubleImaginary, BT FloatComplex, BT FloatComplex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex, BT FloatComplex, BT FloatComplex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* DoubleImaginary */ 	{ BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT DoubleComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT DoubleImaginary,	BT DoubleImaginary,	BT LongDoubleImaginary,	BT DoubleImaginary,	BT DoubleImaginary, BT LongDoubleImaginary, BT LongDoubleImaginary, BT DoubleComplex, BT DoubleComplex, BT DoubleComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex, BT DoubleComplex, BT DoubleComplex, BT DoubleComplex, BT DoubleComplex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* LongDoubleImaginary */ 	{ BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleImaginary,	BT LongDoubleImaginary,	BT LongDoubleImaginary, BT LongDoubleImaginary, BT LongDoubleImaginary, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT _Float128xComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT LongDoubleComplex, BT _Float128xComplex },
+
+		/* SignedInt128 */ 	{ BT SignedInt128,	BT SignedInt128,	BT SignedInt128,	BT SignedInt128,	BT SignedInt128,	BT SignedInt128,	BT SignedInt128,	BT SignedInt128,	BT SignedInt128,	BT SignedInt128,	BT SignedInt128,	BT SignedInt128,	BT Float,	BT Double,	BT LongDouble,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT SignedInt128,	BT UnsignedInt128, BT Float80, BT Float128, BT _Float16, BT _Float32, BT _Float32x, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT _Float16Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* UnsignedInt128 */ 	{ BT UnsignedInt128,	BT UnsignedInt128,	BT UnsignedInt128,	BT UnsignedInt128,	BT UnsignedInt128,	BT UnsignedInt128,	BT UnsignedInt128,	BT UnsignedInt128,	BT UnsignedInt128,	BT UnsignedInt128,	BT UnsignedInt128,	BT UnsignedInt128,	BT Float,	BT Double,	BT LongDouble,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT UnsignedInt128,	BT UnsignedInt128, BT Float80, BT Float128, BT _Float16, BT _Float32, BT _Float32x, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT _Float16Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* Float80 */ 	{ BT Float80,	BT Float80,	BT Float80,	BT Float80,	BT Float80,	BT Float80,	BT Float80,	BT Float80,	BT Float80,	BT Float80,	BT Float80,	BT Float80,	BT Float80,	BT Float80,	BT LongDouble,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT Float80,	BT Float80, BT Float80, BT Float128, BT Float80, BT Float80, BT Float80, BT Float80, BT Float80, BT _Float128, BT _Float128x, BT _Float64xComplex, BT _Float64xComplex, BT _Float64xComplex, BT _Float64xComplex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* Float128 */ 	{ BT Float128,	BT Float128,	BT Float128,	BT Float128,	BT Float128,	BT Float128,	BT Float128,	BT Float128,	BT Float128,	BT Float128,	BT Float128,	BT Float128,	BT Float128,	BT Float128,	BT Float128,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT LongDoubleComplex,	BT Float128,	BT Float128, BT Float128, BT Float128, BT Float128, BT Float128, BT Float128, BT Float128, BT Float128, BT Float128, BT _Float128x, BT _Float128Complex, BT _Float128Complex, BT _Float128Complex, BT _Float128Complex, BT _Float128Complex, BT _Float128Complex, BT _Float128xComplex },
+
+		/* _Float16 */ 	{ BT _Float16,	BT _Float16,	BT _Float16,	BT _Float16,	BT _Float16,	BT _Float16,	BT _Float16,	BT _Float16,	BT _Float16,	BT _Float16,	BT _Float16,	BT _Float16,	BT Float,	BT Double,	BT LongDouble,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT _Float16,	BT _Float16, BT Float80, BT Float128, BT _Float16, BT _Float32, BT _Float32x, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT _Float16Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* _Float32 */ 	{ BT _Float32,	BT _Float32,	BT _Float32,	BT _Float32,	BT _Float32,	BT _Float32,	BT _Float32,	BT _Float32,	BT _Float32,	BT _Float32,	BT _Float32,	BT _Float32,	BT _Float32,	BT Double,	BT LongDouble,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT _Float32,	BT _Float32, BT Float80, BT Float128, BT _Float32, BT _Float32, BT _Float32x, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT _Float32Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* _Float32x */ { BT _Float32x,	BT _Float32x,	BT _Float32x,	BT _Float32x,	BT _Float32x,	BT _Float32x,	BT _Float32x,	BT _Float32x,	BT _Float32x,	BT _Float32x,	BT _Float32x,	BT _Float32x,	BT _Float32x,	BT Double,	BT LongDouble,	BT _Float32xComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT _Float32xComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT _Float32x,	BT _Float32x, BT Float80, BT Float128, BT _Float32x, BT _Float32x, BT _Float32x, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT _Float32xComplex, BT _Float32xComplex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* _Float64 */ 	{ BT _Float64,	BT _Float64,	BT _Float64,	BT _Float64,	BT _Float64,	BT _Float64,	BT _Float64,	BT _Float64,	BT _Float64,	BT _Float64,	BT _Float64,	BT _Float64,	BT _Float64,	BT Double,	BT LongDouble,	BT _Float64Complex,	BT DoubleComplex,	BT LongDoubleComplex,	BT _Float64Complex,	BT DoubleComplex,	BT LongDoubleComplex,	BT _Float64,	BT _Float64, BT Float80, BT Float128, BT _Float64, BT _Float64, BT _Float64, BT _Float64, BT _Float64x, BT _Float128, BT _Float128x, BT _Float64Complex, BT _Float64Complex, BT _Float64Complex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* _Float64x */ 	{ BT _Float64x,	BT _Float64x,	BT _Float64x,	BT _Float64x,	BT _Float64x,	BT _Float64x,	BT _Float64x,	BT _Float64x,	BT _Float64x,	BT _Float64x,	BT _Float64x,	BT _Float64x,	BT _Float64x,	BT _Float64x,	BT LongDouble,	BT _Float64xComplex,	BT _Float64xComplex,	BT LongDoubleComplex,	BT _Float64xComplex,	BT _Float64xComplex,	BT LongDoubleComplex,	BT _Float64x,	BT _Float64x, BT Float80, BT Float128, BT _Float64x, BT _Float64x, BT _Float64x, BT _Float64x, BT _Float64x, BT _Float128, BT _Float128x, BT _Float64xComplex, BT _Float64xComplex, BT _Float64xComplex, BT _Float64xComplex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* _Float128 */ 	{ BT _Float128,	BT _Float128,	BT _Float128,	BT _Float128,	BT _Float128,	BT _Float128,	BT _Float128,	BT _Float128,	BT _Float128,	BT _Float128,	BT _Float128,	BT _Float128,	BT _Float128,	BT _Float128,	BT LongDouble,	BT _Float128Complex,	BT _Float128Complex,	BT LongDoubleComplex,	BT _Float128Complex,	BT _Float128Complex,	BT LongDoubleComplex,	BT _Float128,	BT _Float128, BT _Float128, BT Float128, BT _Float128, BT _Float128, BT _Float128, BT _Float128, BT _Float128, BT _Float128, BT _Float128x, BT _Float128Complex, BT _Float128Complex, BT _Float128Complex, BT _Float128Complex, BT _Float128Complex, BT _Float128Complex, BT _Float128xComplex },
+		/* _Float128x */ 	{ BT _Float128x,	BT _Float128x,	BT _Float128x,	BT _Float128x,	BT _Float128x,	BT _Float128x,	BT _Float128x,	BT _Float128x,	BT _Float128x,	BT _Float128x,	BT _Float128x,	BT _Float128x,	BT _Float128x,	BT _Float128x,	BT _Float128x,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128x,	BT _Float128x, BT _Float128x, BT _Float128x, BT _Float128x, BT _Float128x, BT _Float128x, BT _Float128x, BT _Float128x, BT _Float128x, BT _Float128x, BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex },
+
+		/* _Float16Complex */ 	{ BT _Float16Complex,	BT _Float16Complex,	BT _Float16Complex,	BT _Float16Complex,	BT _Float16Complex,	BT _Float16Complex,	BT _Float16Complex,	BT _Float16Complex,	BT _Float16Complex,	BT _Float16Complex,	BT _Float16Complex,	BT _Float16Complex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT _Float16Complex,	BT _Float16Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float16Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex, BT _Float16Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* _Float32Complex */ 	{ BT _Float32Complex,	BT _Float32Complex,	BT _Float32Complex,	BT _Float32Complex,	BT _Float32Complex,	BT _Float32Complex,	BT _Float32Complex,	BT _Float32Complex,	BT _Float32Complex,	BT _Float32Complex,	BT _Float32Complex,	BT _Float32Complex,	BT _Float32Complex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT FloatComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT _Float32Complex,	BT _Float32Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float32Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex, BT _Float32Complex, BT _Float32Complex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* _Float32xComplex */ { BT _Float32xComplex,	BT _Float32xComplex,	BT _Float32xComplex,	BT _Float32xComplex,	BT _Float32xComplex,	BT _Float32xComplex,	BT _Float32xComplex,	BT _Float32xComplex,	BT _Float32xComplex,	BT _Float32xComplex,	BT _Float32xComplex,	BT _Float32xComplex,	BT _Float32xComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT _Float32xComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT _Float32xComplex,	BT DoubleComplex,	BT LongDoubleComplex,	BT _Float32xComplex,	BT _Float32xComplex, BT _Float64xComplex, BT _Float128Complex, BT _Float32xComplex, BT _Float32xComplex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex, BT _Float32xComplex, BT _Float32xComplex, BT _Float32xComplex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* _Float64Complex */ 	{ BT _Float64Complex,	BT _Float64Complex,	BT _Float64Complex,	BT _Float64Complex,	BT _Float64Complex,	BT _Float64Complex,	BT _Float64Complex,	BT _Float64Complex,	BT _Float64Complex,	BT _Float64Complex,	BT _Float64Complex,	BT _Float64Complex,	BT _Float64Complex,	BT DoubleComplex,	BT LongDoubleComplex,	BT _Float64Complex,	BT DoubleComplex,	BT LongDoubleComplex,	BT _Float64Complex,	BT DoubleComplex,	BT LongDoubleComplex,	BT _Float64Complex,	BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float64Complex, BT _Float64Complex, BT _Float64Complex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex, BT _Float64Complex, BT _Float64Complex, BT _Float64Complex, BT _Float64Complex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* _Float64xComplex */ 	{ BT _Float64xComplex,	BT _Float64xComplex,	BT _Float64xComplex,	BT _Float64xComplex,	BT _Float64xComplex,	BT _Float64xComplex,	BT _Float64xComplex,	BT _Float64xComplex,	BT _Float64xComplex,	BT _Float64xComplex,	BT _Float64xComplex,	BT _Float64xComplex,	BT _Float64xComplex,	BT _Float64xComplex,	BT LongDoubleComplex,	BT _Float64xComplex,	BT _Float64xComplex,	BT LongDoubleComplex,	BT _Float64xComplex,	BT _Float64xComplex,	BT LongDoubleComplex,	BT _Float64xComplex,	BT _Float64xComplex, BT _Float64xComplex, BT _Float128Complex, BT _Float64xComplex, BT _Float64xComplex, BT _Float64xComplex, BT _Float64xComplex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex, BT _Float64xComplex, BT _Float64xComplex, BT _Float64xComplex, BT _Float64xComplex, BT _Float64xComplex, BT _Float128Complex, BT _Float128xComplex },
+		/* _Float128Complex */ 	{ BT _Float128Complex,	BT _Float128Complex,	BT _Float128Complex,	BT _Float128Complex,	BT _Float128Complex,	BT _Float128Complex,	BT _Float128Complex,	BT _Float128Complex,	BT _Float128Complex,	BT _Float128Complex,	BT _Float128Complex,	BT _Float128Complex,	BT _Float128Complex,	BT _Float128Complex,	BT LongDoubleComplex,	BT _Float128Complex,	BT _Float128Complex,	BT LongDoubleComplex,	BT _Float128Complex,	BT _Float128Complex,	BT LongDoubleComplex,	BT _Float128Complex,	BT _Float128Complex, BT _Float128Complex, BT _Float128Complex, BT _Float128Complex, BT _Float128Complex, BT _Float128Complex, BT _Float128Complex, BT _Float128Complex, BT _Float128Complex, BT _Float128xComplex, BT _Float128Complex, BT _Float128Complex, BT _Float128Complex, BT _Float128Complex, BT _Float128Complex, BT _Float128Complex, BT _Float128xComplex },
+		/* _Float128xComplex */ 	{ BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex,	BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex, BT _Float128xComplex },
 	};
+	#undef BT
+#endif
+
+#define BT BasicType::
+static const BasicType::Kind commonTypes[BasicType::NUMBER_OF_BASIC_TYPES][BasicType::NUMBER_OF_BASIC_TYPES] = { // nearest common ancestor
+	/*                              B                        C                       SC                       UC                       SI                      SUI
+	                                I                       UI                       LI                      LUI                      LLI                     LLUI
+	                               IB                      UIB                      _FH                      _FH                       _F                      _FC
+	                                F                       FC                      _FX                     _FXC                       FD                     _FDC
+	                                D                       DC                     F80X                    _FDXC                      F80                      _FB
+	                            _FLDC                       FB                       LD                      LDC                     _FBX                   _FLDXC
+	         */
+	/*     B*/               BT _Bool,                 BT Char,           BT SignedChar,         BT UnsignedChar,       BT ShortSignedInt,     BT ShortUnsignedInt,
+	                     BT SignedInt,          BT UnsignedInt,        BT LongSignedInt,      BT LongUnsignedInt,    BT LongLongSignedInt,  BT LongLongUnsignedInt,
+	                  BT SignedInt128,       BT UnsignedInt128,             BT _Float16,      BT _Float16Complex,             BT _Float32,      BT _Float32Complex,
+	                         BT Float,         BT FloatComplex,            BT _Float32x,     BT _Float32xComplex,             BT _Float64,      BT _Float64Complex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*     C*/                BT Char,                 BT Char,           BT SignedChar,         BT UnsignedChar,       BT ShortSignedInt,     BT ShortUnsignedInt,
+	                     BT SignedInt,          BT UnsignedInt,        BT LongSignedInt,      BT LongUnsignedInt,    BT LongLongSignedInt,  BT LongLongUnsignedInt,
+	                  BT SignedInt128,       BT UnsignedInt128,             BT _Float16,      BT _Float16Complex,             BT _Float32,      BT _Float32Complex,
+	                         BT Float,         BT FloatComplex,            BT _Float32x,     BT _Float32xComplex,             BT _Float64,      BT _Float64Complex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*    SC*/          BT SignedChar,           BT SignedChar,           BT SignedChar,         BT UnsignedChar,       BT ShortSignedInt,     BT ShortUnsignedInt,
+	                     BT SignedInt,          BT UnsignedInt,        BT LongSignedInt,      BT LongUnsignedInt,    BT LongLongSignedInt,  BT LongLongUnsignedInt,
+	                  BT SignedInt128,       BT UnsignedInt128,             BT _Float16,      BT _Float16Complex,             BT _Float32,      BT _Float32Complex,
+	                         BT Float,         BT FloatComplex,            BT _Float32x,     BT _Float32xComplex,             BT _Float64,      BT _Float64Complex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*    UC*/        BT UnsignedChar,         BT UnsignedChar,         BT UnsignedChar,         BT UnsignedChar,       BT ShortSignedInt,     BT ShortUnsignedInt,
+	                     BT SignedInt,          BT UnsignedInt,        BT LongSignedInt,      BT LongUnsignedInt,    BT LongLongSignedInt,  BT LongLongUnsignedInt,
+	                  BT SignedInt128,       BT UnsignedInt128,             BT _Float16,      BT _Float16Complex,             BT _Float32,      BT _Float32Complex,
+	                         BT Float,         BT FloatComplex,            BT _Float32x,     BT _Float32xComplex,             BT _Float64,      BT _Float64Complex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*    SI*/      BT ShortSignedInt,       BT ShortSignedInt,       BT ShortSignedInt,       BT ShortSignedInt,       BT ShortSignedInt,     BT ShortUnsignedInt,
+	                     BT SignedInt,          BT UnsignedInt,        BT LongSignedInt,      BT LongUnsignedInt,    BT LongLongSignedInt,  BT LongLongUnsignedInt,
+	                  BT SignedInt128,       BT UnsignedInt128,             BT _Float16,      BT _Float16Complex,             BT _Float32,      BT _Float32Complex,
+	                         BT Float,         BT FloatComplex,            BT _Float32x,     BT _Float32xComplex,             BT _Float64,      BT _Float64Complex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*   SUI*/    BT ShortUnsignedInt,     BT ShortUnsignedInt,     BT ShortUnsignedInt,     BT ShortUnsignedInt,     BT ShortUnsignedInt,     BT ShortUnsignedInt,
+	                     BT SignedInt,          BT UnsignedInt,        BT LongSignedInt,      BT LongUnsignedInt,    BT LongLongSignedInt,  BT LongLongUnsignedInt,
+	                  BT SignedInt128,       BT UnsignedInt128,             BT _Float16,      BT _Float16Complex,             BT _Float32,      BT _Float32Complex,
+	                         BT Float,         BT FloatComplex,            BT _Float32x,     BT _Float32xComplex,             BT _Float64,      BT _Float64Complex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*     I*/           BT SignedInt,            BT SignedInt,            BT SignedInt,            BT SignedInt,            BT SignedInt,            BT SignedInt,
+	                     BT SignedInt,          BT UnsignedInt,        BT LongSignedInt,      BT LongUnsignedInt,    BT LongLongSignedInt,  BT LongLongUnsignedInt,
+	                  BT SignedInt128,       BT UnsignedInt128,             BT _Float16,      BT _Float16Complex,             BT _Float32,      BT _Float32Complex,
+	                         BT Float,         BT FloatComplex,            BT _Float32x,     BT _Float32xComplex,             BT _Float64,      BT _Float64Complex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*    UI*/         BT UnsignedInt,          BT UnsignedInt,          BT UnsignedInt,          BT UnsignedInt,          BT UnsignedInt,          BT UnsignedInt,
+	                   BT UnsignedInt,          BT UnsignedInt,        BT LongSignedInt,      BT LongUnsignedInt,    BT LongLongSignedInt,  BT LongLongUnsignedInt,
+	                  BT SignedInt128,       BT UnsignedInt128,             BT _Float16,      BT _Float16Complex,             BT _Float32,      BT _Float32Complex,
+	                         BT Float,         BT FloatComplex,            BT _Float32x,     BT _Float32xComplex,             BT _Float64,      BT _Float64Complex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*    LI*/       BT LongSignedInt,        BT LongSignedInt,        BT LongSignedInt,        BT LongSignedInt,        BT LongSignedInt,        BT LongSignedInt,
+	                 BT LongSignedInt,        BT LongSignedInt,        BT LongSignedInt,      BT LongUnsignedInt,    BT LongLongSignedInt,  BT LongLongUnsignedInt,
+	                  BT SignedInt128,       BT UnsignedInt128,             BT _Float16,      BT _Float16Complex,             BT _Float32,      BT _Float32Complex,
+	                         BT Float,         BT FloatComplex,            BT _Float32x,     BT _Float32xComplex,             BT _Float64,      BT _Float64Complex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*   LUI*/     BT LongUnsignedInt,      BT LongUnsignedInt,      BT LongUnsignedInt,      BT LongUnsignedInt,      BT LongUnsignedInt,      BT LongUnsignedInt,
+	               BT LongUnsignedInt,      BT LongUnsignedInt,      BT LongUnsignedInt,      BT LongUnsignedInt,    BT LongLongSignedInt,  BT LongLongUnsignedInt,
+	                  BT SignedInt128,       BT UnsignedInt128,             BT _Float16,      BT _Float16Complex,             BT _Float32,      BT _Float32Complex,
+	                         BT Float,         BT FloatComplex,            BT _Float32x,     BT _Float32xComplex,             BT _Float64,      BT _Float64Complex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*   LLI*/   BT LongLongSignedInt,    BT LongLongSignedInt,    BT LongLongSignedInt,    BT LongLongSignedInt,    BT LongLongSignedInt,    BT LongLongSignedInt,
+	             BT LongLongSignedInt,    BT LongLongSignedInt,    BT LongLongSignedInt,    BT LongLongSignedInt,    BT LongLongSignedInt,  BT LongLongUnsignedInt,
+	                  BT SignedInt128,       BT UnsignedInt128,             BT _Float16,      BT _Float16Complex,             BT _Float32,      BT _Float32Complex,
+	                         BT Float,         BT FloatComplex,            BT _Float32x,     BT _Float32xComplex,             BT _Float64,      BT _Float64Complex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*  LLUI*/ BT LongLongUnsignedInt,  BT LongLongUnsignedInt,  BT LongLongUnsignedInt,  BT LongLongUnsignedInt,  BT LongLongUnsignedInt,  BT LongLongUnsignedInt,
+	           BT LongLongUnsignedInt,  BT LongLongUnsignedInt,  BT LongLongUnsignedInt,  BT LongLongUnsignedInt,  BT LongLongUnsignedInt,  BT LongLongUnsignedInt,
+	                  BT SignedInt128,       BT UnsignedInt128,             BT _Float16,      BT _Float16Complex,             BT _Float32,      BT _Float32Complex,
+	                         BT Float,         BT FloatComplex,            BT _Float32x,     BT _Float32xComplex,             BT _Float64,      BT _Float64Complex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*    IB*/        BT SignedInt128,         BT SignedInt128,         BT SignedInt128,         BT SignedInt128,         BT SignedInt128,         BT SignedInt128,
+	                  BT SignedInt128,         BT SignedInt128,         BT SignedInt128,         BT SignedInt128,         BT SignedInt128,         BT SignedInt128,
+	                  BT SignedInt128,       BT UnsignedInt128,             BT _Float16,      BT _Float16Complex,             BT _Float32,      BT _Float32Complex,
+	                         BT Float,         BT FloatComplex,            BT _Float32x,     BT _Float32xComplex,             BT _Float64,      BT _Float64Complex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*   UIB*/      BT UnsignedInt128,       BT UnsignedInt128,       BT UnsignedInt128,       BT UnsignedInt128,       BT UnsignedInt128,       BT UnsignedInt128,
+	                BT UnsignedInt128,       BT UnsignedInt128,       BT UnsignedInt128,       BT UnsignedInt128,       BT UnsignedInt128,       BT UnsignedInt128,
+	                BT UnsignedInt128,       BT UnsignedInt128,             BT _Float16,      BT _Float16Complex,             BT _Float32,      BT _Float32Complex,
+	                         BT Float,         BT FloatComplex,            BT _Float32x,     BT _Float32xComplex,             BT _Float64,      BT _Float64Complex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*   _FH*/            BT _Float16,             BT _Float16,             BT _Float16,             BT _Float16,             BT _Float16,             BT _Float16,
+	                      BT _Float16,             BT _Float16,             BT _Float16,             BT _Float16,             BT _Float16,             BT _Float16,
+	                      BT _Float16,             BT _Float16,             BT _Float16,      BT _Float16Complex,             BT _Float32,      BT _Float32Complex,
+	                         BT Float,         BT FloatComplex,            BT _Float32x,     BT _Float32xComplex,             BT _Float64,      BT _Float64Complex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*   _FH*/     BT _Float16Complex,      BT _Float16Complex,      BT _Float16Complex,      BT _Float16Complex,      BT _Float16Complex,      BT _Float16Complex,
+	               BT _Float16Complex,      BT _Float16Complex,      BT _Float16Complex,      BT _Float16Complex,      BT _Float16Complex,      BT _Float16Complex,
+	               BT _Float16Complex,      BT _Float16Complex,      BT _Float16Complex,      BT _Float16Complex,      BT _Float32Complex,      BT _Float32Complex,
+	                  BT FloatComplex,         BT FloatComplex,     BT _Float32xComplex,     BT _Float32xComplex,      BT _Float64Complex,      BT _Float64Complex,
+	                 BT DoubleComplex,        BT DoubleComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float128Complex,
+	              BT _Float128Complex,     BT _Float128Complex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT _Float128xComplex,    BT _Float128xComplex,
+	          
+	/*    _F*/            BT _Float32,             BT _Float32,             BT _Float32,             BT _Float32,             BT _Float32,             BT _Float32,
+	                      BT _Float32,             BT _Float32,             BT _Float32,             BT _Float32,             BT _Float32,             BT _Float32,
+	                      BT _Float32,             BT _Float32,             BT _Float32,      BT _Float32Complex,             BT _Float32,      BT _Float32Complex,
+	                         BT Float,         BT FloatComplex,            BT _Float32x,     BT _Float32xComplex,             BT _Float64,      BT _Float64Complex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*   _FC*/     BT _Float32Complex,      BT _Float32Complex,      BT _Float32Complex,      BT _Float32Complex,      BT _Float32Complex,      BT _Float32Complex,
+	               BT _Float32Complex,      BT _Float32Complex,      BT _Float32Complex,      BT _Float32Complex,      BT _Float32Complex,      BT _Float32Complex,
+	               BT _Float32Complex,      BT _Float32Complex,      BT _Float32Complex,      BT _Float32Complex,      BT _Float32Complex,      BT _Float32Complex,
+	                  BT FloatComplex,         BT FloatComplex,     BT _Float32xComplex,     BT _Float32xComplex,      BT _Float64Complex,      BT _Float64Complex,
+	                 BT DoubleComplex,        BT DoubleComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float128Complex,
+	              BT _Float128Complex,     BT _Float128Complex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT _Float128xComplex,    BT _Float128xComplex,
+	          
+	/*     F*/               BT Float,                BT Float,                BT Float,                BT Float,                BT Float,                BT Float,
+	                         BT Float,                BT Float,                BT Float,                BT Float,                BT Float,                BT Float,
+	                         BT Float,                BT Float,                BT Float,         BT FloatComplex,                BT Float,         BT FloatComplex,
+	                         BT Float,         BT FloatComplex,            BT _Float32x,     BT _Float32xComplex,             BT _Float64,      BT _Float64Complex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*    FC*/        BT FloatComplex,         BT FloatComplex,         BT FloatComplex,         BT FloatComplex,         BT FloatComplex,         BT FloatComplex,
+	                  BT FloatComplex,         BT FloatComplex,         BT FloatComplex,         BT FloatComplex,         BT FloatComplex,         BT FloatComplex,
+	                  BT FloatComplex,         BT FloatComplex,         BT FloatComplex,         BT FloatComplex,         BT FloatComplex,         BT FloatComplex,
+	                  BT FloatComplex,         BT FloatComplex,     BT _Float32xComplex,     BT _Float32xComplex,      BT _Float64Complex,      BT _Float64Complex,
+	                 BT DoubleComplex,        BT DoubleComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float128Complex,
+	              BT _Float128Complex,     BT _Float128Complex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT _Float128xComplex,    BT _Float128xComplex,
+	          
+	/*   _FX*/           BT _Float32x,            BT _Float32x,            BT _Float32x,            BT _Float32x,            BT _Float32x,            BT _Float32x,
+	                     BT _Float32x,            BT _Float32x,            BT _Float32x,            BT _Float32x,            BT _Float32x,            BT _Float32x,
+	                     BT _Float32x,            BT _Float32x,            BT _Float32x,     BT _Float32xComplex,            BT _Float32x,     BT _Float32xComplex,
+	                     BT _Float32x,     BT _Float32xComplex,            BT _Float32x,     BT _Float32xComplex,             BT _Float64,      BT _Float64Complex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*  _FXC*/    BT _Float32xComplex,     BT _Float32xComplex,     BT _Float32xComplex,     BT _Float32xComplex,     BT _Float32xComplex,     BT _Float32xComplex,
+	              BT _Float32xComplex,     BT _Float32xComplex,     BT _Float32xComplex,     BT _Float32xComplex,     BT _Float32xComplex,     BT _Float32xComplex,
+	              BT _Float32xComplex,     BT _Float32xComplex,     BT _Float32xComplex,     BT _Float32xComplex,     BT _Float32xComplex,     BT _Float32xComplex,
+	              BT _Float32xComplex,     BT _Float32xComplex,     BT _Float32xComplex,     BT _Float32xComplex,      BT _Float64Complex,      BT _Float64Complex,
+	                 BT DoubleComplex,        BT DoubleComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float128Complex,
+	              BT _Float128Complex,     BT _Float128Complex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT _Float128xComplex,    BT _Float128xComplex,
+	          
+	/*    FD*/            BT _Float64,             BT _Float64,             BT _Float64,             BT _Float64,             BT _Float64,             BT _Float64,
+	                      BT _Float64,             BT _Float64,             BT _Float64,             BT _Float64,             BT _Float64,             BT _Float64,
+	                      BT _Float64,             BT _Float64,             BT _Float64,      BT _Float64Complex,             BT _Float64,      BT _Float64Complex,
+	                      BT _Float64,      BT _Float64Complex,             BT _Float64,      BT _Float64Complex,             BT _Float64,      BT _Float64Complex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*  _FDC*/     BT _Float64Complex,      BT _Float64Complex,      BT _Float64Complex,      BT _Float64Complex,      BT _Float64Complex,      BT _Float64Complex,
+	               BT _Float64Complex,      BT _Float64Complex,      BT _Float64Complex,      BT _Float64Complex,      BT _Float64Complex,      BT _Float64Complex,
+	               BT _Float64Complex,      BT _Float64Complex,      BT _Float64Complex,      BT _Float64Complex,      BT _Float64Complex,      BT _Float64Complex,
+	               BT _Float64Complex,      BT _Float64Complex,      BT _Float64Complex,      BT _Float64Complex,      BT _Float64Complex,      BT _Float64Complex,
+	                 BT DoubleComplex,        BT DoubleComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float128Complex,
+	              BT _Float128Complex,     BT _Float128Complex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT _Float128xComplex,    BT _Float128xComplex,
+	          
+	/*     D*/              BT Double,               BT Double,               BT Double,               BT Double,               BT Double,               BT Double,
+	                        BT Double,               BT Double,               BT Double,               BT Double,               BT Double,               BT Double,
+	                        BT Double,               BT Double,               BT Double,        BT DoubleComplex,               BT Double,        BT DoubleComplex,
+	                        BT Double,        BT DoubleComplex,               BT Double,        BT DoubleComplex,               BT Double,        BT DoubleComplex,
+	                        BT Double,        BT DoubleComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*    DC*/       BT DoubleComplex,        BT DoubleComplex,        BT DoubleComplex,        BT DoubleComplex,        BT DoubleComplex,        BT DoubleComplex,
+	                 BT DoubleComplex,        BT DoubleComplex,        BT DoubleComplex,        BT DoubleComplex,        BT DoubleComplex,        BT DoubleComplex,
+	                 BT DoubleComplex,        BT DoubleComplex,        BT DoubleComplex,        BT DoubleComplex,        BT DoubleComplex,        BT DoubleComplex,
+	                 BT DoubleComplex,        BT DoubleComplex,        BT DoubleComplex,        BT DoubleComplex,        BT DoubleComplex,        BT DoubleComplex,
+	                 BT DoubleComplex,        BT DoubleComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float128Complex,
+	              BT _Float128Complex,     BT _Float128Complex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT _Float128xComplex,    BT _Float128xComplex,
+	          
+	/*  F80X*/           BT _Float64x,            BT _Float64x,            BT _Float64x,            BT _Float64x,            BT _Float64x,            BT _Float64x,
+	                     BT _Float64x,            BT _Float64x,            BT _Float64x,            BT _Float64x,            BT _Float64x,            BT _Float64x,
+	                     BT _Float64x,            BT _Float64x,            BT _Float64x,     BT _Float64xComplex,            BT _Float64x,     BT _Float64xComplex,
+	                     BT _Float64x,     BT _Float64xComplex,            BT _Float64x,     BT _Float64xComplex,            BT _Float64x,     BT _Float64xComplex,
+	                     BT _Float64x,     BT _Float64xComplex,            BT _Float64x,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/* _FDXC*/    BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,
+	              BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,
+	              BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,
+	              BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,
+	              BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float64xComplex,     BT _Float128Complex,
+	              BT _Float128Complex,     BT _Float128Complex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT _Float128xComplex,    BT _Float128xComplex,
+	          
+	/*   F80*/           BT __float80,            BT __float80,            BT __float80,            BT __float80,            BT __float80,            BT __float80,
+	                     BT __float80,            BT __float80,            BT __float80,            BT __float80,            BT __float80,            BT __float80,
+	                     BT __float80,            BT __float80,            BT __float80,     BT _Float64xComplex,            BT __float80,     BT _Float64xComplex,
+	                     BT __float80,     BT _Float64xComplex,            BT __float80,     BT _Float64xComplex,            BT __float80,     BT _Float64xComplex,
+	                     BT __float80,     BT _Float64xComplex,            BT __float80,     BT _Float64xComplex,            BT __float80,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*   _FB*/           BT _Float128,            BT _Float128,            BT _Float128,            BT _Float128,            BT _Float128,            BT _Float128,
+	                     BT _Float128,            BT _Float128,            BT _Float128,            BT _Float128,            BT _Float128,            BT _Float128,
+	                     BT _Float128,            BT _Float128,            BT _Float128,     BT _Float128Complex,            BT _Float128,     BT _Float128Complex,
+	                     BT _Float128,     BT _Float128Complex,            BT _Float128,     BT _Float128Complex,            BT _Float128,     BT _Float128Complex,
+	                     BT _Float128,     BT _Float128Complex,            BT _Float128,     BT _Float128Complex,            BT _Float128,            BT _Float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/* _FLDC*/    BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,
+	              BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,
+	              BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,
+	              BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,
+	              BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,     BT _Float128Complex,
+	              BT _Float128Complex,     BT _Float128Complex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT _Float128xComplex,    BT _Float128xComplex,
+	          
+	/*    FB*/          BT __float128,           BT __float128,           BT __float128,           BT __float128,           BT __float128,           BT __float128,
+	                    BT __float128,           BT __float128,           BT __float128,           BT __float128,           BT __float128,           BT __float128,
+	                    BT __float128,           BT __float128,           BT __float128,     BT _Float128Complex,           BT __float128,     BT _Float128Complex,
+	                    BT __float128,     BT _Float128Complex,           BT __float128,     BT _Float128Complex,           BT __float128,     BT _Float128Complex,
+	                    BT __float128,     BT _Float128Complex,           BT __float128,     BT _Float128Complex,           BT __float128,           BT __float128,
+	              BT _Float128Complex,           BT __float128,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*    LD*/          BT LongDouble,           BT LongDouble,           BT LongDouble,           BT LongDouble,           BT LongDouble,           BT LongDouble,
+	                    BT LongDouble,           BT LongDouble,           BT LongDouble,           BT LongDouble,           BT LongDouble,           BT LongDouble,
+	                    BT LongDouble,           BT LongDouble,           BT LongDouble,    BT LongDoubleComplex,           BT LongDouble,    BT LongDoubleComplex,
+	                    BT LongDouble,    BT LongDoubleComplex,           BT LongDouble,    BT LongDoubleComplex,           BT LongDouble,    BT LongDoubleComplex,
+	                    BT LongDouble,    BT LongDoubleComplex,           BT LongDouble,    BT LongDoubleComplex,           BT LongDouble,           BT LongDouble,
+	             BT LongDoubleComplex,           BT LongDouble,           BT LongDouble,    BT LongDoubleComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*   LDC*/   BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,
+	             BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,
+	             BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,
+	             BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,
+	             BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,
+	             BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT LongDoubleComplex,    BT _Float128xComplex,    BT _Float128xComplex,
+	          
+	/*  _FBX*/          BT _Float128x,           BT _Float128x,           BT _Float128x,           BT _Float128x,           BT _Float128x,           BT _Float128x,
+	                    BT _Float128x,           BT _Float128x,           BT _Float128x,           BT _Float128x,           BT _Float128x,           BT _Float128x,
+	                    BT _Float128x,           BT _Float128x,           BT _Float128x,    BT _Float128xComplex,           BT _Float128x,    BT _Float128xComplex,
+	                    BT _Float128x,    BT _Float128xComplex,           BT _Float128x,    BT _Float128xComplex,           BT _Float128x,    BT _Float128xComplex,
+	                    BT _Float128x,    BT _Float128xComplex,           BT _Float128x,    BT _Float128xComplex,           BT _Float128x,           BT _Float128x,
+	             BT _Float128xComplex,           BT _Float128x,           BT _Float128x,    BT _Float128xComplex,           BT _Float128x,    BT _Float128xComplex,
+	          
+	/*_FLDXC*/   BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,
+	             BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,
+	             BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,
+	             BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,
+	             BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,
+	             BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,    BT _Float128xComplex,
+	          
+};
+#undef BT
+
 	static_assert(
-		sizeof(combinedType)/sizeof(combinedType[0][0]) == BasicType::NUMBER_OF_BASIC_TYPES*BasicType::NUMBER_OF_BASIC_TYPES,
+		sizeof(commonTypes)/sizeof(commonTypes[0][0]) == BasicType::NUMBER_OF_BASIC_TYPES*BasicType::NUMBER_OF_BASIC_TYPES,
 		"Each basic type kind should have a corresponding row in the combined type matrix"
 	);
@@ -218,5 +504,5 @@
 	void CommonType::postvisit( BasicType *basicType ) {
 		if ( BasicType *otherBasic = dynamic_cast< BasicType* >( type2 ) ) {
-			BasicType::Kind newType = combinedType[ basicType->get_kind() ][ otherBasic->get_kind() ];
+			BasicType::Kind newType = commonTypes[ basicType->get_kind() ][ otherBasic->get_kind() ];
 			if ( ( ( newType == basicType->get_kind() && basicType->get_qualifiers() >= otherBasic->get_qualifiers() ) || widenFirst ) && ( ( newType == otherBasic->get_kind() && basicType->get_qualifiers() <= otherBasic->get_qualifiers() ) || widenSecond ) ) {
 				result = new BasicType( basicType->get_qualifiers() | otherBasic->get_qualifiers(), newType );
@@ -224,5 +510,5 @@
 		} else if ( dynamic_cast< EnumInstType * > ( type2 ) || dynamic_cast< ZeroType* >( type2 ) || dynamic_cast< OneType* >( type2 ) ) {
 			// use signed int in lieu of the enum/zero/one type
-			BasicType::Kind newType = combinedType[ basicType->get_kind() ][ BasicType::SignedInt ];
+			BasicType::Kind newType = commonTypes[ basicType->get_kind() ][ BasicType::SignedInt ];
 			if ( ( ( newType == basicType->get_kind() && basicType->get_qualifiers() >= type2->get_qualifiers() ) || widenFirst ) && ( ( newType != basicType->get_kind() && basicType->get_qualifiers() <= type2->get_qualifiers() ) || widenSecond ) ) {
 				result = new BasicType( basicType->get_qualifiers() | type2->get_qualifiers(), newType );
Index: src/ResolvExpr/ConversionCost.cc
===================================================================
--- src/ResolvExpr/ConversionCost.cc	(revision 0e66857b99034170c3e5555f271044ed10f86624)
+++ src/ResolvExpr/ConversionCost.cc	(revision 2782f38a71eacbc10ee2e26fb9a636cb17b6ccd4)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 07:06:19 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Sep 25 15:43:34 2017
-// Update Count     : 10
+// Last Modified On : Fri Feb  8 09:48:39 2019
+// Update Count     : 19
 //
 
@@ -28,12 +28,13 @@
 
 namespace ResolvExpr {
-	const Cost Cost::zero =      Cost{  0,  0,  0,  0,  0,  0 };
-	const Cost Cost::infinity =  Cost{ -1, -1, -1, -1,  1, -1 };
-	const Cost Cost::unsafe =    Cost{  1,  0,  0,  0,  0,  0 };
-	const Cost Cost::poly =      Cost{  0,  1,  0,  0,  0,  0 };
-	const Cost Cost::safe =      Cost{  0,  0,  1,  0,  0,  0 };
-	const Cost Cost::var =       Cost{  0,  0,  0,  1,  0,  0 };
-	const Cost Cost::spec =      Cost{  0,  0,  0,  0, -1,  0 };
-	const Cost Cost::reference = Cost{  0,  0,  0,  0,  0,  1 };
+	const Cost Cost::zero =      Cost{  0,  0,  0,  0,  0,  0,  0 };
+	const Cost Cost::infinity =  Cost{ -1, -1, -1, -1, -1,  1, -1 };
+	const Cost Cost::unsafe =    Cost{  1,  0,  0,  0,  0,  0,  0 };
+	const Cost Cost::poly =      Cost{  0,  1,  0,  0,  0,  0,  0 };
+	const Cost Cost::safe =      Cost{  0,  0,  1,  0,  0,  0,  0 };
+	const Cost Cost::sign =      Cost{  0,  0,  0,  1,  0,  0,  0 };
+	const Cost Cost::var =       Cost{  0,  0,  0,  0,  1,  0,  0 };
+	const Cost Cost::spec =      Cost{  0,  0,  0,  0,  0, -1,  0 };
+	const Cost Cost::reference = Cost{  0,  0,  0,  0,  0,  0,  1 };
 
 #if 0
@@ -178,5 +179,5 @@
 		: dest( dest ), indexer( indexer ), cost( Cost::infinity ), env( env ), costFunc( costFunc ) {
 	}
-
+#if 0
 /*
             Old
@@ -265,5 +266,115 @@
 		"Each basic type kind should have a corresponding row in the cost matrix"
 	);
-
+#endif
+
+	/* EXTENDED INTEGRAL RANK HIERARCHY (root to leaves)
+	            _Bool
+	Char    SignedChar    UnsignedChar
+	        ShortSignedInt    ShortUnsignedInt
+	        SignedInt    UnsignedInt
+	        LongSignedInt    LongUnsignedInt
+	        LongLongSignedInt    LongLongUnsignedInt
+	        SignedInt128    UnsignedInt128
+	        _Float16    _Float16Complex
+	        _Float32    _Float32Complex
+	        Float    FloatComplex
+	        _Float32x    _Float32xComplex
+	        _Float64    _Float64Complex
+	        Double    DoubleComplex
+	        _Float64x    _Float64xComplex
+	            __float80
+	        _Float128    _Float128Complex
+	            __float128
+	        LongDouble    LongDoubleComplex
+	        _Float128x    _Float128xComplex
+	*/
+
+	static const int costMatrix[BasicType::NUMBER_OF_BASIC_TYPES][BasicType::NUMBER_OF_BASIC_TYPES] = { // path length from root to node
+		/*          B    C   SC   UC   SI  SUI    I   UI   LI  LUI  LLI LLUI   IB  UIB  _FH  _FH   _F  _FC    F   FC  _FX _FXC   FD _FDC    D   DC F80X _FDXC  F80  _FB _FLDC   FB   LD  LDC _FBX _FLDXC */
+		/*     B*/  0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  13,  14,  14,  15,  15,  16,  17,  16,  18,  17, 
+		/*     C*/ -1,   0,   1,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  13,  14,  14,  15,  16,  15,  17,  16, 
+		/*    SC*/ -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  13,  14,  14,  15,  16,  15,  17,  16, 
+		/*    UC*/ -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  13,  14,  14,  15,  16,  15,  17,  16, 
+		/*    SI*/ -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  13,  14,  15,  14,  16,  15, 
+		/*   SUI*/ -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  13,  14,  15,  14,  16,  15, 
+		/*     I*/ -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  14,  13,  15,  14, 
+		/*    UI*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  12,  13,  14,  13,  15,  14, 
+		/*    LI*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  13,  12,  14,  13, 
+		/*   LUI*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,  13,  12,  14,  13, 
+		/*   LLI*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  12,  11,  13,  12, 
+		/*  LLUI*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  10,  11,  12,  11,  13,  12, 
+		/*    IB*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  11,  10,  12,  11, 
+		/*   UIB*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,   9,  10,  11,  10,  12,  11, 
+		/*   _FH*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   8,   9,  10,   9,  11,  10, 
+		/*   _FH*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1,  -1,   2,  -1,   3,  -1,   4,  -1,   5,  -1,   6,  -1,  -1,   7,  -1,  -1,   8,  -1,   9, 
+		/*    _F*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   7,   8,   9,   8,  10,   9, 
+		/*   _FC*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1,  -1,   2,  -1,   3,  -1,   4,  -1,   5,  -1,  -1,   6,  -1,  -1,   7,  -1,   8, 
+		/*     F*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   7,   8,   7,   9,   8, 
+		/*    FC*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1,  -1,   2,  -1,   3,  -1,   4,  -1,  -1,   5,  -1,  -1,   6,  -1,   7, 
+		/*   _FX*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   7,   6,   8,   7, 
+		/*  _FXC*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1,  -1,   2,  -1,   3,  -1,  -1,   4,  -1,  -1,   5,  -1,   6, 
+		/*    FD*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   4,   5,   6,   5,   7,   6, 
+		/*  _FDC*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1,  -1,   2,  -1,  -1,   3,  -1,  -1,   4,  -1,   5, 
+		/*     D*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3,   4,   5,   4,   6,   5, 
+		/*    DC*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1,  -1,  -1,   2,  -1,  -1,   3,  -1,   4, 
+		/*  F80X*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   4,   3,   5,   4, 
+		/* _FDXC*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,   1,  -1,  -1,   2,  -1,   3, 
+		/*   F80*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   1,   0,   1,   2,   2,   3,   3,   4,   4, 
+		/*   _FB*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   3,   3, 
+		/* _FLDC*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,   1,  -1,   2, 
+		/*    FB*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   1,   0,   1,   2,   2,   3, 
+		/*    LD*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2, 
+		/*   LDC*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   1, 
+		/*  _FBX*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1, 
+		/*_FLDXC*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0, 
+	};
+	static_assert(
+		sizeof(costMatrix)/sizeof(costMatrix[0][0]) == BasicType::NUMBER_OF_BASIC_TYPES*BasicType::NUMBER_OF_BASIC_TYPES,
+		"Missing row in the cost matrix"
+	);
+
+	static const int signMatrix[BasicType::NUMBER_OF_BASIC_TYPES][BasicType::NUMBER_OF_BASIC_TYPES] = { // number of sign changes in safe conversion
+		/*          B    C   SC   UC   SI  SUI    I   UI   LI  LUI  LLI LLUI   IB  UIB  _FH  _FH   _F  _FC    F   FC  _FX _FXC   FD _FDC    D   DC F80X _FDXC  F80  _FB _FLDC   FB   LD  LDC _FBX _FLDXC */
+		/*     B*/  0,   0,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*     C*/ -1,   0,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*    SC*/ -1,  -1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*    UC*/ -1,  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*    SI*/ -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*   SUI*/ -1,  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*     I*/ -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*    UI*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*    LI*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*   LUI*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*   LLI*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*  LLUI*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*    IB*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*   UIB*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*   _FH*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*   _FH*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, 
+		/*    _F*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*   _FC*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, 
+		/*     F*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*    FC*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, 
+		/*   _FX*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*  _FXC*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0,  -1,   0,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, 
+		/*    FD*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*  _FDC*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, 
+		/*     D*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*    DC*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, 
+		/*  F80X*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/* _FDXC*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, 
+		/*   F80*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
+		/*   _FB*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0,   0, 
+		/* _FLDC*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,  -1,   0,  -1,   0, 
+		/*    FB*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0,   0,   0, 
+		/*    LD*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0,   0,   0, 
+		/*   LDC*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,  -1,   0, 
+		/*  _FBX*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   0, 
+		/*_FLDXC*/ -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0, 
+	};
+	static_assert(
+		sizeof(signMatrix)/sizeof(signMatrix[0][0]) == BasicType::NUMBER_OF_BASIC_TYPES*BasicType::NUMBER_OF_BASIC_TYPES,
+		"Missing row in the sign matrix"
+	);
 
 	void ConversionCost::postvisit( VoidType * ) {
@@ -279,4 +390,5 @@
 				cost = Cost::zero;
 				cost.incSafe( tableResult );
+				cost.incSign( signMatrix[ basicType->get_kind() ][ destAsBasic->get_kind() ] );
 			} // if
 		} else if ( dynamic_cast< EnumInstType *>( dest ) ) {
@@ -300,5 +412,5 @@
 					// types are the same, except otherPointer has more qualifiers
 					cost = Cost::safe;
-				}
+				} // if
 			} else {
 				int assignResult = ptrsAssignable( pointerType->base, destAsPtr->base, env );
@@ -422,8 +534,9 @@
 				cost = Cost::zero;
 				cost.incSafe( tableResult + 1 );
-			}
+				cost.incSign( signMatrix[ BasicType::SignedInt ][ destAsBasic->get_kind() ] );
+			} // if
 		} else if ( dynamic_cast< PointerType* >( dest ) ) {
 			cost = Cost::safe;
-		}
+		} // if
 	}
 
@@ -439,6 +552,7 @@
 				cost = Cost::zero;
 				cost.incSafe( tableResult + 1 );
-			}
-		}
+				cost.incSign( signMatrix[ BasicType::SignedInt ][ destAsBasic->get_kind() ] );
+			} // if
+		} // if
 	}
 } // namespace ResolvExpr
Index: src/ResolvExpr/Cost.h
===================================================================
--- src/ResolvExpr/Cost.h	(revision 0e66857b99034170c3e5555f271044ed10f86624)
+++ src/ResolvExpr/Cost.h	(revision 2782f38a71eacbc10ee2e26fb9a636cb17b6ccd4)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 09:39:50 2015
-// Last Modified By : Aaron B. Moss
-// Last Modified On : Fri Oct 05 14:32:00 2018
-// Update Count     : 7
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Feb  7 20:54:29 2019
+// Update Count     : 8
 //
 
@@ -21,11 +21,11 @@
 	class Cost {
 	  private:
-		Cost( int unsafeCost, int polyCost, int safeCost, int varCost, int specCost,
-			int referenceCost );
-
+		Cost( int unsafeCost, int polyCost, int safeCost, int signCost,
+			int varCost, int specCost, int referenceCost );
 	  public:
 		Cost & incUnsafe( int inc = 1 );
 		Cost & incPoly( int inc = 1 );
 		Cost & incSafe( int inc = 1 );
+		Cost & incSign( int inc = 1 );
 		Cost & incVar( int inc = 1 );
 		Cost & decSpec( int inc = 1 );
@@ -35,4 +35,5 @@
 		int get_polyCost() const { return polyCost; }
 		int get_safeCost() const { return safeCost; }
+		int get_signCost() const { return signCost; }
 		int get_varCost() const { return varCost; }
 		int get_specCost() const { return specCost; }
@@ -40,5 +41,4 @@
 
 		Cost operator+( const Cost &other ) const;
-		Cost operator-( const Cost &other ) const;
 		Cost &operator+=( const Cost &other );
 		bool operator<( const Cost &other ) const;
@@ -55,4 +55,5 @@
 		static const Cost poly;
 		static const Cost safe;
+		static const Cost sign;
 		static const Cost var;
 		static const Cost spec;
@@ -63,4 +64,5 @@
 		int polyCost;       ///< Count of parameters and return values bound to some poly type
 		int safeCost;       ///< Safe (widening) conversions
+		int signCost;       ///< Count of safe sign conversions
 		int varCost;        ///< Count of polymorphic type variables
 		int specCost;       ///< Polymorphic type specializations (type assertions), negative cost
@@ -68,8 +70,8 @@
 	};
 
-	inline Cost::Cost( int unsafeCost, int polyCost, int safeCost, int varCost, int specCost, 
-			int referenceCost ) 
-		: unsafeCost( unsafeCost ), polyCost( polyCost ), safeCost( safeCost ), varCost( varCost ), 
-		  specCost( specCost ), referenceCost( referenceCost ) {}
+	inline Cost::Cost( int unsafeCost, int polyCost, int safeCost, int signCost,
+			int varCost, int specCost, int referenceCost )
+		: unsafeCost( unsafeCost ), polyCost( polyCost ), safeCost( safeCost ), signCost( signCost ),
+		  varCost( varCost ), specCost( specCost ), referenceCost( referenceCost ) {}
 
 	inline Cost & Cost::incUnsafe( int inc ) {
@@ -88,4 +90,10 @@
 		if ( *this == infinity ) return *this;
 		safeCost += inc;
+		return *this;
+	}
+
+	inline Cost & Cost::incSign( int inc ) {
+		if ( *this == infinity ) return *this;
+		signCost += inc;
 		return *this;
 	}
@@ -111,16 +119,8 @@
 	inline Cost Cost::operator+( const Cost &other ) const {
 		if ( *this == infinity || other == infinity ) return infinity;
-		return Cost{ 
-			unsafeCost + other.unsafeCost, polyCost + other.polyCost, safeCost + other.safeCost, 
-			varCost + other.varCost, specCost + other.specCost, 
+		return Cost{
+			unsafeCost + other.unsafeCost, polyCost + other.polyCost, safeCost + other.safeCost,
+			signCost + other.signCost, varCost + other.varCost, specCost + other.specCost,
 			referenceCost + other.referenceCost };
-	}
-
-	inline Cost Cost::operator-( const Cost &other ) const {
-		if ( *this == infinity || other == infinity ) return infinity;
-		return Cost{ 
-			unsafeCost - other.unsafeCost, polyCost - other.polyCost, safeCost - other.safeCost, 
-			varCost - other.varCost, specCost - other.specCost, 
-			referenceCost - other.referenceCost };
 	}
 
@@ -134,4 +134,5 @@
 		polyCost += other.polyCost;
 		safeCost += other.safeCost;
+		signCost += other.signCost;
 		varCost += other.varCost;
 		specCost += other.specCost;
@@ -156,4 +157,8 @@
 		} else if ( safeCost < other.safeCost ) {
 			return true;
+		} else if ( signCost > other.signCost ) {
+			return false;
+		} else if ( signCost < other.signCost ) {
+			return true;
 		} else if ( varCost > other.varCost ) {
 			return false;
@@ -180,4 +185,5 @@
 		c = polyCost - other.polyCost; if ( c ) return c;
 		c = safeCost - other.safeCost; if ( c ) return c;
+		c = signCost - other.signCost; if ( c ) return c;
 		c = varCost - other.varCost; if ( c ) return c;
 		c = specCost - other.specCost; if ( c ) return c;
@@ -189,4 +195,5 @@
 			&& polyCost == other.polyCost
 			&& safeCost == other.safeCost
+			&& signCost == other.signCost
 			&& varCost == other.varCost
 			&& specCost == other.specCost
@@ -199,6 +206,7 @@
 
 	inline std::ostream &operator<<( std::ostream &os, const Cost &cost ) {
-		return os << "( " << cost.unsafeCost << ", " << cost.polyCost << ", " 
-		          << cost.safeCost << ", " << cost.varCost << ", " << cost.specCost << ", "
+		return os << "( " << cost.unsafeCost << ", " << cost.polyCost << ", "
+		          << cost.safeCost << ", " << cost.signCost << ", "
+				  << cost.varCost << ", " << cost.specCost << ", "
 		          << cost.referenceCost << " )";
 	}
