diff --git a/src/TNL/Containers/Algorithms/VectorAssignment.h b/src/TNL/Containers/Algorithms/VectorAssignment.h
index 26df5059f46e16c298bd1513be75f1c9d7b9d017..36829be82a70c2ff74f39d275c6a411c21e34873 100644
--- a/src/TNL/Containers/Algorithms/VectorAssignment.h
+++ b/src/TNL/Containers/Algorithms/VectorAssignment.h
@@ -24,7 +24,7 @@ namespace Algorithms {
 template< typename Vector,
           typename T,
           bool hasSubscriptOperator = HasSubscriptOperator< T >::value >
-struct VectorAssignment{};
+struct VectorAssignment;
 
 /**
  * \brief Vector assignment with an operation: +=, -=, *=, /=
@@ -33,7 +33,7 @@ template< typename Vector,
           typename T,
           bool hasSubscriptOperator = HasSubscriptOperator< T >::value,
           bool hasSetSizeMethod = HasSetSizeMethod< T >::value >
-struct VectorAssignmentWithOperation{};
+struct VectorAssignmentWithOperation;
 
 /**
  * \brief Specialization of ASSIGNEMENT with subscript operator
diff --git a/src/TNL/Containers/Expressions/DistributedExpressionTemplates.h b/src/TNL/Containers/Expressions/DistributedExpressionTemplates.h
index 8530874e4698fd96ee777b9311e263fd9ec53d34..ab53338436dceccf977f5b43b492ee79892623a9 100644
--- a/src/TNL/Containers/Expressions/DistributedExpressionTemplates.h
+++ b/src/TNL/Containers/Expressions/DistributedExpressionTemplates.h
@@ -69,14 +69,16 @@ struct DistributedBinaryExpressionTemplate< T1, T2, Operation, VectorExpressionV
                                                         typename T2::ConstLocalViewType,
                                                         Operation >;
 
-   static_assert( std::is_same< typename T1::DeviceType, typename T2::DeviceType >::value, "Attempt to mix operands allocated on different device types." );
-   static_assert( IsStaticArrayType< T1 >::value == IsStaticArrayType< T2 >::value, "Attempt to mix static and non-static operands in binary expression templates." );
+   static_assert( std::is_same< typename T1::DeviceType, typename T2::DeviceType >::value,
+                  "Attempt to mix operands which have different DeviceType." );
+   static_assert( IsStaticArrayType< T1 >::value == IsStaticArrayType< T2 >::value,
+                  "Attempt to mix static and non-static operands in binary expression templates." );
 
    DistributedBinaryExpressionTemplate( const T1& a, const T2& b )
    : op1( a ), op2( b )
    {
       TNL_ASSERT_EQ( op1.getSize(), op2.getSize(),
-                     "Sizes of both operands must be equal." );
+                     "Attempt to mix operands with different sizes." );
       TNL_ASSERT_EQ( op1.getLocalRange(), op2.getLocalRange(),
                      "Distributed expressions are supported only on vectors which are distributed the same way." );
       TNL_ASSERT_EQ( op1.getCommunicationGroup(), op2.getCommunicationGroup(),
diff --git a/src/TNL/Containers/Expressions/ExpressionTemplates.h b/src/TNL/Containers/Expressions/ExpressionTemplates.h
index 110cd4155aeec4a20d6a55afe7d0851ad47ea588..bb8c78e926efc0a8ac3ce7ebb3ae7b53a265906e 100644
--- a/src/TNL/Containers/Expressions/ExpressionTemplates.h
+++ b/src/TNL/Containers/Expressions/ExpressionTemplates.h
@@ -68,11 +68,17 @@ struct BinaryExpressionTemplate< T1, T2, Operation, VectorExpressionVariable, Ve
    using DeviceType = typename T1::DeviceType;
    using IndexType = typename T1::IndexType;
 
-   static_assert( std::is_same< typename T1::DeviceType, typename T2::DeviceType >::value, "Attempt to mix operands allocated on different device types." );
-   static_assert( IsStaticArrayType< T1 >::value == IsStaticArrayType< T2 >::value, "Attempt to mix static and non-static operands in binary expression templates." );
+   static_assert( std::is_same< typename T1::DeviceType, typename T2::DeviceType >::value,
+                  "Attempt to mix operands which have different DeviceType." );
+   static_assert( IsStaticArrayType< T1 >::value == IsStaticArrayType< T2 >::value,
+                  "Attempt to mix static and non-static operands in binary expression templates." );
 
    BinaryExpressionTemplate( const T1& a, const T2& b )
-   : op1( a ), op2( b ) {}
+   : op1( a ), op2( b )
+   {
+      TNL_ASSERT_EQ( op1.getSize(), op2.getSize(),
+                     "Attempt to mix operands with different sizes." );
+   }
 
    RealType getElement( const IndexType i ) const
    {
diff --git a/src/TNL/Containers/Expressions/StaticExpressionTemplates.h b/src/TNL/Containers/Expressions/StaticExpressionTemplates.h
index 7d2cd35a64a5c6ef60d6d66ee89029ffdfbedd5b..874dc1a01d154a2fd96279e7d4d7aa8db81fff44 100644
--- a/src/TNL/Containers/Expressions/StaticExpressionTemplates.h
+++ b/src/TNL/Containers/Expressions/StaticExpressionTemplates.h
@@ -62,13 +62,15 @@ template< typename T1,
           template< typename, typename > class Operation >
 struct StaticBinaryExpressionTemplate< T1, T2, Operation, VectorExpressionVariable, VectorExpressionVariable >
 {
-   static_assert( IsStaticArrayType< T1 >::value, "Left-hand side operand of static expression is not static, i.e. based on static vector." );
-   static_assert( IsStaticArrayType< T2 >::value, "Right-hand side operand of static expression is not static, i.e. based on static vector." );
    using RealType = decltype( Operation< typename T1::RealType, typename T2::RealType >::
                               evaluate( std::declval<T1>()[0], std::declval<T2>()[0] ) );
 
-   static_assert( IsStaticArrayType< T1 >::value == IsStaticArrayType< T2 >::value, "Attempt to mix static and non-static operands in binary expression templates" );
-   static_assert( T1::getSize() == T2::getSize(), "Attempt to mix static operands with different sizes." );
+   static_assert( IsStaticArrayType< T1 >::value,
+                  "Left-hand side operand of static expression is not static, i.e. based on static vector." );
+   static_assert( IsStaticArrayType< T2 >::value,
+                  "Right-hand side operand of static expression is not static, i.e. based on static vector." );
+   static_assert( T1::getSize() == T2::getSize(),
+                  "Attempt to mix static operands with different sizes." );
 
    static constexpr int getSize() { return T1::getSize(); };
 
@@ -79,7 +81,6 @@ struct StaticBinaryExpressionTemplate< T1, T2, Operation, VectorExpressionVariab
    __cuda_callable__
    RealType operator[]( const int i ) const
    {
-      TNL_ASSERT_LT( i, this->getSize(), "Asking for element with index larger than expression size." );
       return Operation< typename T1::RealType, typename T2::RealType >::evaluate( op1[ i ], op2[ i ] );
    }
 
@@ -111,7 +112,8 @@ template< typename T1,
           template< typename, typename > class Operation >
 struct StaticBinaryExpressionTemplate< T1, T2, Operation, VectorExpressionVariable, ArithmeticVariable  >
 {
-   static_assert( IsStaticArrayType< T1 >::value, "Left-hand side operand of static expression is not static, i.e. based on static vector." );
+   static_assert( IsStaticArrayType< T1 >::value,
+                  "Left-hand side operand of static expression is not static, i.e. based on static vector." );
 
    using RealType = decltype( Operation< typename T1::RealType, T2 >::
                               evaluate( std::declval<T1>()[0], std::declval<T2>() ) );
@@ -125,7 +127,6 @@ struct StaticBinaryExpressionTemplate< T1, T2, Operation, VectorExpressionVariab
    __cuda_callable__
    RealType operator[]( const int i ) const
    {
-      TNL_ASSERT_LT( i, this->getSize(), "Asking for element with index larger than expression size." );
       return Operation< typename T1::RealType, T2 >::evaluate( op1[ i ], op2 );
    }
 
@@ -157,7 +158,8 @@ template< typename T1,
           template< typename, typename > class Operation >
 struct StaticBinaryExpressionTemplate< T1, T2, Operation, ArithmeticVariable, VectorExpressionVariable  >
 {
-   static_assert( IsStaticArrayType< T2 >::value, "Right-hand side operand of static expression is not static, i.e. based on static vector." );
+   static_assert( IsStaticArrayType< T2 >::value,
+                  "Right-hand side operand of static expression is not static, i.e. based on static vector." );
 
    using RealType = decltype( Operation< T1, typename T2::RealType >::
                               evaluate( std::declval<T1>(), std::declval<T2>()[0] ) );
@@ -171,7 +173,6 @@ struct StaticBinaryExpressionTemplate< T1, T2, Operation, ArithmeticVariable, Ve
    __cuda_callable__
    RealType operator[]( const int i ) const
    {
-      TNL_ASSERT_LT( i, this->getSize(), "Asking for element with index larger than expression size." );
       return Operation< T1, typename T2::RealType >::evaluate( op1, op2[ i ] );
    }
 
@@ -216,7 +217,6 @@ struct StaticUnaryExpressionTemplate< T1, Operation, VectorExpressionVariable >
    __cuda_callable__
    RealType operator[]( const int i ) const
    {
-      TNL_ASSERT_LT( i, this->getSize(), "Asking for element with index larger than expression size." );
       return Operation< typename T1::RealType >::evaluate( operand[ i ] );
    }