Index: sources/test_regression/15042009/Makefile
===================================================================
--- sources/test_regression/15042009/Makefile	(revision 19)
+++ sources/test_regression/15042009/Makefile	(revision 21)
@@ -1,5 +1,5 @@
 include ../env.mk
 
-SYSTEM    = system.cpp
+SYSTEM    = system.cpp system2.cpp system3.cpp
 EXE_SCASS = $(SYSTEM:.cpp=_systemcass.x)
 EXE_SC    = $(SYSTEM:.cpp=_systemc.x)
@@ -19,4 +19,6 @@
   done
 	echo Testing system_systemcass.x ; system_systemcass.x || eval ${failcom} ; \
+	echo Testing system2_systemcass.x ; system2_systemcass.x || eval ${failcom} ; \
+	echo Testing system3_systemcass.x ; system3_systemcass.x || eval ${failcom} ; \
 	#
 
Index: sources/test_regression/15042009/system2.cpp
===================================================================
--- sources/test_regression/15042009/system2.cpp	(revision 21)
+++ sources/test_regression/15042009/system2.cpp	(revision 21)
@@ -0,0 +1,40 @@
+#include "systemc.h"
+#include <iostream>
+
+using namespace std;
+
+#define ASSERT(x) \
+  { errnum++; \
+    if (!(x)) \
+    { \
+    cerr << "ASSERT : " #x "\n"; \
+    exit (errnum); \
+    } \
+  }
+
+using namespace std;
+
+typedef sc_uint<36> data_type; 
+
+int
+sc_main (int argc, char ** argv)
+{
+  sc_uint<36> a, b, c;
+  const long long int ca = 0xf00000000LLU;
+  const long long int cb = 0x123456789LLU;
+  a = ca;
+  b = cb;
+
+  c = a & b;
+  if (c != (ca & cb))
+    return 1;
+
+  c = a;
+  if (a != c)
+    return 1;
+  if (!(a == c))
+    return 1;
+
+  return 0;
+}
+
Index: sources/test_regression/15042009/system3.cpp
===================================================================
--- sources/test_regression/15042009/system3.cpp	(revision 21)
+++ sources/test_regression/15042009/system3.cpp	(revision 21)
@@ -0,0 +1,63 @@
+#include "systemc.h"
+#include <iostream>
+
+using namespace std;
+
+#define ASSERT(x) \
+  { errnum++; \
+    if (!(x)) \
+    { \
+    cerr << "ASSERT : " #x "\n"; \
+    exit (errnum); \
+    } \
+  }
+
+using namespace std;
+
+typedef sc_uint<36> data_type; 
+
+class param_t
+{
+public:
+  static const unsigned int B = 36;
+  typedef sc_dt::sc_uint<B> be_t;
+};
+
+template <typename param_t>
+class test_t 
+{
+public:
+  typedef typename param_t::be_t test_be_t;
+  
+  test_be_t test_be;
+};
+
+int
+sc_main (int argc, char ** argv)
+{
+  sc_uint<36> a;
+  const long long int ca = 0xf00000000LLU;
+  a = ca;
+
+  test_t<param_t> test1, test2;
+  test1.test_be = a;
+  test2.test_be = ca;
+
+  if (test1.test_be != test2.test_be)
+    return 1;
+
+  bool ret = (test1.test_be == a);
+  if (!ret)
+    return 1;
+
+  return 0;
+
+  /* the following should be compiled and not executed */
+  sc_signal<test_t<param_t>::test_be_t > sig_test;
+  sig_test = test1.test_be;
+
+  ret = (sig_test == test2.test_be);
+  if (!ret)
+    return 1;
+}
+
