template <typename Index, int AStorageOrder, bool ConjugateA, int  UpLo> \
struct general_matrix_matrix_rankupdate<Index,EIGTYPE,AStorageOrder,ConjugateA,ColMajor,UpLo> { \
  enum { \
    conjA = (((AStorageOrder==
ColMajor) && ConjugateA) || ((AStorageOrder==
RowMajor) && !ConjugateA)) ? 1 : 0 \
  }; \
                          const EIGTYPE* , 
Index , EIGTYPE* res, 
Index resStride, EIGTYPE 
alpha, level3_blocking<EIGTYPE, EIGTYPE>& ) \
 
  { \
   typedef Matrix<EIGTYPE, Dynamic, Dynamic, AStorageOrder> 
MatrixType; \
\
   BlasIndex 
lda=convert_index<BlasIndex>(lhsStride), ldc=convert_index<BlasIndex>(resStride), 
n=convert_index<BlasIndex>(
size), k=convert_index<BlasIndex>(depth); \
   char uplo=((IsLower) ? 
'L' : 
'U'), trans=((AStorageOrder==
RowMajor) ? 
'C':
'N'); \
   RTYPE alpha_, beta_; \
   const EIGTYPE* a_ptr; \
\
   beta_ = 1.0; \
 \
   if (conjA) { \
     Map<const MatrixType, 0, OuterStride<> > mapA(lhs,
n,k,
OuterStride<>(lhsStride)); \
     a = mapA.conjugate(); \
   } else a_ptr=lhs; \
   BLASFUNC(&uplo, &trans, &
n, &k, &alpha_, (BLASTYPE*)a_ptr, &
lda, &beta_, (BLASTYPE*)res, &ldc); \
  } \
};