diff --git a/modules/core/include/opencv2/core/operations.hpp b/modules/core/include/opencv2/core/operations.hpp
index a0db6ce68..990e2e044 100644
--- a/modules/core/include/opencv2/core/operations.hpp
+++ b/modules/core/include/opencv2/core/operations.hpp
@@ -916,7 +916,7 @@ double norm(const Matx<_Tp, m, n>& M, int normType)
 {
     if( normType == NORM_INF )
     {
-        T1 s = 0;
+        _Tp s = 0;
         for( int i = 0; i < m*n; i++ )
             s = std::max(s, std::abs(M.val[i]));
         return s;
@@ -924,7 +924,7 @@ double norm(const Matx<_Tp, m, n>& M, int normType)
     
     if( normType == NORM_L1 )
     {
-        T1 s = 0;
+        _Tp s = 0;
         for( int i = 0; i < m*n; i++ )
             s += std::abs(M.val[i]);
         return s;
@@ -939,7 +939,7 @@ template<typename _Tp, int m, int n> static inline
 bool operator == (const Matx<_Tp, m, n>& a, const Matx<_Tp, m, n>& b)
 {
     for( int i = 0; i < m*n; i++ )
-        if( a[i] != b[i] ) return false;
+        if( a.val[i] != b.val[i] ) return false;
     return true;
 }
     
@@ -1047,7 +1047,7 @@ template<typename _Tp, int cn> inline Vec<_Tp, cn> Vec<_Tp, cn>::all(_Tp alpha)
 template<typename _Tp, int cn> inline Vec<_Tp, cn> Vec<_Tp, cn>::mul(const Vec<_Tp, cn>& v) const
 {
     Vec<_Tp, cn> w;
-    for( int i = 0; i < cn; i++ ) w.val[i] = saturate_cast<_Tp>(val[i]*v.val[i]);
+    for( int i = 0; i < cn; i++ ) w.val[i] = saturate_cast<_Tp>(this->val[i]*v.val[i]);
     return w;
 }
     
@@ -1061,7 +1061,7 @@ template<typename _Tp, int cn> template<typename T2>
 inline Vec<_Tp, cn>::operator Vec<T2, cn>() const
 {
     Vec<T2, cn> v;
-    for( int i = 0; i < cn; i++ ) v.val[i] = saturate_cast<T2>(val[i]);
+    for( int i = 0; i < cn; i++ ) v.val[i] = saturate_cast<T2>(this->val[i]);
     return v;
 }
 
@@ -1069,7 +1069,7 @@ template<typename _Tp, int cn> inline Vec<_Tp, cn>::operator CvScalar() const
 {
     CvScalar s = {{0,0,0,0}};
     int i;
-    for( i = 0; i < std::min(cn, 4); i++ ) s.val[i] = val[i];
+    for( i = 0; i < std::min(cn, 4); i++ ) s.val[i] = this->val[i];
     for( ; i < 4; i++ ) s.val[i] = 0;
     return s;
 }
@@ -1077,25 +1077,25 @@ template<typename _Tp, int cn> inline Vec<_Tp, cn>::operator CvScalar() const
 template<typename _Tp, int cn> inline const _Tp& Vec<_Tp, cn>::operator [](int i) const
 {
     CV_DbgAssert( (unsigned)i < (unsigned)cn );
-    return val[i];
+    return this->val[i];
 }
     
 template<typename _Tp, int cn> inline _Tp& Vec<_Tp, cn>::operator [](int i)
 {
     CV_DbgAssert( (unsigned)i < (unsigned)cn );
-    return val[i];
+    return this->val[i];
 }
 
 template<typename _Tp, int cn> inline const _Tp& Vec<_Tp, cn>::operator ()(int i) const
 {
     CV_DbgAssert( (unsigned)i < (unsigned)cn );
-    return val[i];
+    return this->val[i];
 }
 
 template<typename _Tp, int cn> inline _Tp& Vec<_Tp, cn>::operator ()(int i)
 {
     CV_DbgAssert( (unsigned)i < (unsigned)cn );
-    return val[i];
+    return this->val[i];
 }    
     
 template<typename _Tp1, typename _Tp2, int cn> static inline Vec<_Tp1, cn>&
@@ -1241,14 +1241,14 @@ VecCommaInitializer<_Tp, cn> operator << (const Vec<_Tp, cn>& vec, _T2 val)
     
 template<typename _Tp, int cn> inline
 VecCommaInitializer<_Tp, cn>::VecCommaInitializer(Vec<_Tp, cn>* _vec)
-    : MatxCommaInitializer(_vec)
+    : MatxCommaInitializer<_Tp, cn, 1>(_vec)
 {}
 
 template<typename _Tp, int cn> template<typename _T2> inline
 VecCommaInitializer<_Tp, cn>& VecCommaInitializer<_Tp, cn>::operator , (_T2 value)
 {
-    CV_DbgAssert( idx < cn );
-    vec->val[idx++] = saturate_cast<_Tp>(value);
+    CV_DbgAssert( this->idx < cn );
+    this->dst->val[this->idx++] = saturate_cast<_Tp>(value);
     return *this;
 }
 
@@ -1256,7 +1256,7 @@ template<typename _Tp, int cn> inline
 Vec<_Tp, cn> VecCommaInitializer<_Tp, cn>::operator *() const
 {
     CV_DbgAssert( this->idx == cn );
-    return *vec;
+    return *this->dst;
 }    
 
 //////////////////////////////// Complex //////////////////////////////