Index: /trunk/SophyaLib/BaseTools/datatype.cc
===================================================================
--- /trunk/SophyaLib/BaseTools/datatype.cc	(revision 2883)
+++ /trunk/SophyaLib/BaseTools/datatype.cc	(revision 2884)
@@ -34,14 +34,25 @@
 template <class T>
 string DataTypeInfo<T>::getTypeName() { return("???unknowntype???"); }
+DECL_TEMP_SPEC
 string DataTypeInfo<uint_1>::getTypeName() { return("uint_1"); }
+DECL_TEMP_SPEC
 string DataTypeInfo<uint_2>::getTypeName() { return("uint_2"); }
+DECL_TEMP_SPEC
 string DataTypeInfo<int_2>::getTypeName() { return("int_2"); }
+DECL_TEMP_SPEC
 string DataTypeInfo<int_4>::getTypeName() { return("int_4"); }
+DECL_TEMP_SPEC
 string DataTypeInfo<int_8>::getTypeName() { return("int_8"); }
+DECL_TEMP_SPEC
 string DataTypeInfo<uint_4>::getTypeName() { return("uint_4"); }
+DECL_TEMP_SPEC
 string DataTypeInfo<uint_8>::getTypeName() { return("uint_8"); }
+DECL_TEMP_SPEC
 string DataTypeInfo<r_4>::getTypeName() { return("r_4"); }
+DECL_TEMP_SPEC
 string DataTypeInfo<r_8>::getTypeName() { return("r_8"); }
+DECL_TEMP_SPEC
 string DataTypeInfo< complex<r_4> >::getTypeName() { return(" complex<r_4> "); }
+DECL_TEMP_SPEC
 string DataTypeInfo< complex<r_8> >::getTypeName() { return(" complex<r_8> "); }
 #endif
Index: /trunk/SophyaLib/BaseTools/machdefs_mkmf.h
===================================================================
--- /trunk/SophyaLib/BaseTools/machdefs_mkmf.h	(revision 2883)
+++ /trunk/SophyaLib/BaseTools/machdefs_mkmf.h	(revision 2884)
@@ -222,10 +222,10 @@
 /*    __KCC__      : KCC, version >= 3.3 is required                   */
 /*    __SGICC__    : SGI (IRIX64) CC compiler                          */
+/*    __INTEL_COMPILER :   : INTEL compiler                            */
+/*    __IBMCPP__   : AIX (IBM) xlC c++ compiler                        */
 
 /***********************************************************************/
 /* Compiler-specific stuff                                             */
 /***********************************************************************/
-
-/* Some features will be *required* for Planck. Which ones ?               */
   
 /*   ANSI_TEMPLATES        : use ANSI syntax for explicit templates        */
@@ -245,4 +245,5 @@
 /*   NO_IOS_COMPLEX        : does not have operator << defined for complex */
 /*   DECL_TEMP_SPEC        : Template specialization declaration           */
+/*   TSNMLUPG4             : Two stage name look-up scheme (g++>3.4)       */
 
 
@@ -269,4 +270,10 @@
 #endif
 
+/* Most compilers dot not implement two level name lookup for templates 
+   introduced by gcc >= 3.4 
+*/
+#ifdef TSNMLUPG4
+#undef TSNMLUPG4
+#endif
 
 /* now the specific things */
@@ -284,4 +291,7 @@
 
 #ifdef __GNUG__
+#define GCC_VERSION (__GNUC__ * 10000 \
+                               + __GNUC_MINOR__ * 100 \
+                               + __GNUC_PATCHLEVEL__)
 #define ANSI_TEMPLATES
 /*
@@ -294,4 +304,13 @@
 #define HAS_IOS_BIN
 #define HAS_IOS_NOCREATE
+#if ( GCC_VERSION >= 30000 ) 
+#undef  DECL_TEMP_SPEC
+#define DECL_TEMP_SPEC template <>
+#endif
+#if ( GCC_VERSION >= 34000 )
+/* Two level name look-up scheme for templates introduced from gcc 3.4 */
+#define TSNMLUPG4
+#endif
+
 #endif
 
Index: /trunk/SophyaLib/BaseTools/mutyv.cc
===================================================================
--- /trunk/SophyaLib/BaseTools/mutyv.cc	(revision 2883)
+++ /trunk/SophyaLib/BaseTools/mutyv.cc	(revision 2884)
@@ -150,7 +150,30 @@
 
 /* --Methode-- */
+string & MuTyV::Convert(string & x) const 
+{
+  if (typ == MTVString)  x = *strv;
+  else if (typ == MTVTimeStamp) { x = TimeStamp(dv).ToString(); }
+  else {
+    char buff[96];
+    if (typ == MTVInteger)  sprintf(buff,"%ld", (long)iv);
+    else if (typ == MTVFloat) sprintf(buff,"%g", dv);
+    else if (typ == MTVComplex) sprintf(buff,"(%g,%g)", dv, dv_im);
+    else buff[0] = '\0';
+    x = buff;
+  }
+  return x;
+}
+
+/* --Methode-- */
 MuTyV::operator TimeStamp() const 
 {
   return TimeStamp(dv);
+}
+
+/* --Methode-- */
+TimeStamp& MuTyV::Convert(TimeStamp& x) const 
+{
+  x = TimeStamp(dv);
+  return x;
 }
 
Index: /trunk/SophyaLib/BaseTools/mutyv.h
===================================================================
--- /trunk/SophyaLib/BaseTools/mutyv.h	(revision 2883)
+++ /trunk/SophyaLib/BaseTools/mutyv.h	(revision 2884)
@@ -77,4 +77,19 @@
          operator TimeStamp() const ; 
 
+  inline uint_2 Convert(uint_2& x) const { x = (uint_2)iv; return x; }
+  inline uint_4 Convert(uint_4& x) const { x = (uint_4)iv; return x; }
+  inline uint_8 Convert(uint_8& x) const { x = (uint_8)iv; return x; }
+  inline int_4 Convert(int_4& x) const { x = (int_4)iv; return x; }
+  inline int_8 Convert(int_8& x) const { x = iv; return x; }
+  inline r_4 Convert(r_4& x) const { x = (r_4)dv; return x; }
+  inline r_8 Convert(r_8& x) const { x = dv; return x; }
+  inline complex<r_4> Convert(complex<r_4> & x) const 
+    { x = complex< r_4 > ((r_4)dv, (r_4)dv_im); return x; }
+  inline complex<r_8> Convert(complex<r_8> & x) const 
+    { x = complex< r_8 > (dv, dv_im); return x; }
+  
+  string&  Convert(string& x) const ; 
+  TimeStamp& Convert(TimeStamp& x) const ; 
+
   inline MTVType Type() const { return typ; }
   inline int_8   GetIntPart() const { return iv; }
Index: /trunk/SophyaLib/BaseTools/segdatablock.h
===================================================================
--- /trunk/SophyaLib/BaseTools/segdatablock.h	(revision 2883)
+++ /trunk/SophyaLib/BaseTools/segdatablock.h	(revision 2884)
@@ -91,6 +91,6 @@
   {
     SegDataBlock<T> * sdb = dynamic_cast< SegDataBlock<T> *>(&a);
-    if (p != NULL) { 
-      mSRef = p->mSRef;
+    if (sdb != NULL) { 
+      mSRef = sdb->mSRef;
       mSRef->nref++;
     }
Index: /trunk/SophyaLib/TArray/tarray.cc
===================================================================
--- /trunk/SophyaLib/TArray/tarray.cc	(revision 2883)
+++ /trunk/SophyaLib/TArray/tarray.cc	(revision 2884)
@@ -476,5 +476,6 @@
    --- Appel explicite de l'operateur de conversion sur l'objet MuTyV 
 */
-    for(k=0; k<gpas; k++)  pe[k*step] = seq(j*gpas+k).operator T();
+    for(k=0; k<gpas; k++)  seq(j*gpas+k).Convert(pe[k*step]);
+//REMPLACE suite pb compil gcc4    for(k=0; k<gpas; k++)  pe[k*step] = seq(j*gpas+k).operator T();
   }
   return(*this);
@@ -1113,5 +1114,6 @@
 */
     for(k=0, ka=0;  k<gpas;  k+=step, ka+=stepa)  
-      pe[k] = a.ValueAtPosition(offa+ka).operator T(); 
+      a.ValueAtPosition(offa+ka).Convert(pe[k]); 
+      //REMPLACE Suite pb compil gcc4   pe[k] = a.ValueAtPosition(offa+ka).operator T(); 
   }
   return(*this);
Index: /trunk/SophyaLib/TArray/tmatrix.h
===================================================================
--- /trunk/SophyaLib/TArray/tmatrix.h	(revision 2883)
+++ /trunk/SophyaLib/TArray/tmatrix.h	(revision 2884)
@@ -13,4 +13,7 @@
 class TMatrix : public TArray<T> {
 public:
+
+#include "tmatrix_tsnl.h"  /* For two level name look-up gcc >= 3.4 */
+
   // Creation / destruction 
   TMatrix();
Index: /trunk/SophyaLib/TArray/tmatrix_tsnl.h
===================================================================
--- /trunk/SophyaLib/TArray/tmatrix_tsnl.h	(revision 2884)
+++ /trunk/SophyaLib/TArray/tmatrix_tsnl.h	(revision 2884)
@@ -0,0 +1,55 @@
+#ifdef TSNMLUPG4
+/* This is a specific declaration file to cope with two level 
+   name look-up scheme , introduced by gcc >= 3.4 
+   THIS FILE SHOULD NOT NORMALLY BE INCLUDED IN USER PROGRAMS 
+   R. Ansari -  Jan 2006 
+*/
+using SOPHYA::TArray<T>::MemoryMapping  ;
+using SOPHYA::TArray<T>::AutoMemoryMapping  ;
+using SOPHYA::TArray<T>::SameMemoryMapping  ;
+using SOPHYA::TArray<T>::CMemoryMapping  ;
+using SOPHYA::TArray<T>::FortranMemoryMapping  ;
+
+using SOPHYA::TArray<T>::VectorType  ;
+using SOPHYA::TArray<T>::AutoVectorType  ;
+using SOPHYA::TArray<T>::SameVectorType  ;
+using SOPHYA::TArray<T>::ColumnVector  ;
+using SOPHYA::TArray<T>::RowVector  ;
+
+using SOPHYA::TArray<T>::NbDimensions  ;
+using SOPHYA::TArray<T>::RowsKA  ;
+using SOPHYA::TArray<T>::ColsKA  ;
+using SOPHYA::TArray<T>::VectKA  ;
+using SOPHYA::TArray<T>::Size  ;
+
+using SOPHYA::TArray<T>::GetMatProdOpt  ;
+using SOPHYA::TArray<T>::SetMemoryMapping  ;
+using SOPHYA::TArray<T>::GetMemoryMapping ;
+using SOPHYA::TArray<T>::GetDefaultMemoryMapping ;
+using SOPHYA::TArray<T>::UpdateMemoryMapping  ;
+
+using SOPHYA::TArray<T>::SubArray  ;
+
+// using SOPHYA::TArray<T>::  ;
+
+using SOPHYA::TArray<T>::max_nprt_ ;
+using SOPHYA::TArray<T>::ndim_ ;
+using SOPHYA::TArray<T>::size_ ;
+using SOPHYA::TArray<T>::totsize_ ;
+using SOPHYA::TArray<T>::offset_ ;
+using SOPHYA::TArray<T>::step_ ;
+using SOPHYA::TArray<T>::minstep_ ;
+using SOPHYA::TArray<T>::moystep_ ;
+
+using SOPHYA::TArray<T>::marowi_  ;
+using SOPHYA::TArray<T>::macoli_ ;
+using SOPHYA::TArray<T>::veceli_  ;
+using SOPHYA::TArray<T>::arrtype_  ;
+
+using SOPHYA::TArray<T>::mNDBlock ;
+
+using SOPHYA::TArray<T>::SetSeq ;
+using SOPHYA::TArray<T>::SetBA ;
+using SOPHYA::TArray<T>::Show ;
+
+#endif  /* TSNMLUPG4 */
Index: /trunk/SophyaLib/TArray/tvector.h
===================================================================
--- /trunk/SophyaLib/TArray/tvector.h	(revision 2883)
+++ /trunk/SophyaLib/TArray/tvector.h	(revision 2884)
@@ -12,4 +12,7 @@
 class TVector : public TMatrix<T> {
 public:
+
+#include "tvector_tsnl.h"  /* For two level name look-up gcc >= 3.4 */
+
   // Creation / destruction 
   TVector();
Index: /trunk/SophyaLib/TArray/tvector_tsnl.h
===================================================================
--- /trunk/SophyaLib/TArray/tvector_tsnl.h	(revision 2884)
+++ /trunk/SophyaLib/TArray/tvector_tsnl.h	(revision 2884)
@@ -0,0 +1,65 @@
+#ifdef TSNMLUPG4
+/* This is a specific declaration file to cope with two level
+   name look-up scheme , introduced by gcc >= 3.4
+   THIS FILE SHOULD NOT NORMALLY BE INCLUDED IN USER PROGRAMS
+   R. Ansari -  Jan 2006
+*/
+
+using SOPHYA::TMatrix<T>::MemoryMapping  ;
+using SOPHYA::TMatrix<T>::AutoMemoryMapping  ;
+using SOPHYA::TMatrix<T>::SameMemoryMapping  ;
+using SOPHYA::TMatrix<T>::CMemoryMapping  ;
+using SOPHYA::TMatrix<T>::FortranMemoryMapping  ;
+
+using SOPHYA::TMatrix<T>::VectorType  ;
+using SOPHYA::TMatrix<T>::AutoVectorType  ;
+using SOPHYA::TMatrix<T>::SameVectorType  ;
+using SOPHYA::TMatrix<T>::ColumnVector  ;
+using SOPHYA::TMatrix<T>::RowVector  ;
+
+using SOPHYA::TMatrix<T>::SelectVectorType  ;
+using SOPHYA::TMatrix<T>::GetDefaultVectorType  ;
+using SOPHYA::TMatrix<T>::GetVectorType  ;
+
+
+using SOPHYA::TMatrix<T>::NbDimensions  ;
+using SOPHYA::TMatrix<T>::RowsKA  ;
+using SOPHYA::TMatrix<T>::ColsKA  ;
+using SOPHYA::TMatrix<T>::VectKA  ;
+using SOPHYA::TMatrix<T>::Size  ;
+
+using SOPHYA::TMatrix<T>::GetMatProdOpt  ;
+using SOPHYA::TMatrix<T>::SetMemoryMapping  ;
+using SOPHYA::TMatrix<T>::GetMemoryMapping ;
+using SOPHYA::TMatrix<T>::GetDefaultMemoryMapping ;
+using SOPHYA::TMatrix<T>::UpdateMemoryMapping  ;
+
+using SOPHYA::TMatrix<T>::SubArray  ;
+
+using SOPHYA::TMatrix<T>::NRows  ;
+using SOPHYA::TMatrix<T>::NCols  ;
+
+// using SOPHYA::TMatrix<T>::  ;
+
+using SOPHYA::TMatrix<T>::max_nprt_ ;
+using SOPHYA::TMatrix<T>::ndim_ ;
+using SOPHYA::TMatrix<T>::size_ ;
+using SOPHYA::TMatrix<T>::totsize_ ;
+using SOPHYA::TMatrix<T>::offset_ ;
+using SOPHYA::TMatrix<T>::step_ ;
+using SOPHYA::TMatrix<T>::minstep_ ;
+using SOPHYA::TMatrix<T>::moystep_ ;
+
+using SOPHYA::TMatrix<T>::marowi_  ;
+using SOPHYA::TMatrix<T>::macoli_ ;
+using SOPHYA::TMatrix<T>::veceli_  ;
+using SOPHYA::TMatrix<T>::arrtype_  ;
+
+using SOPHYA::TMatrix<T>::mNDBlock ;
+
+using SOPHYA::TMatrix<T>::SetSeq ;
+using SOPHYA::TMatrix<T>::SetBA ;
+using SOPHYA::TMatrix<T>::Show ;
+
+#endif  /* TSNMLUPG4 */
+
