]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Do not allow assigning to rvalue references of VectorizedArray.
authorWolfgang Bangerth <bangerth@colostate.edu>
Sun, 5 Mar 2023 10:20:52 +0000 (03:20 -0700)
committerWolfgang Bangerth <bangerth@colostate.edu>
Sun, 5 Mar 2023 10:20:52 +0000 (03:20 -0700)
include/deal.II/base/vectorization.h

index fd29a24f26b3e608780599bbc8d6411f95092934..9aea1cb6a4367baa6808c03083d3a83497ef6285 100644 (file)
@@ -451,16 +451,24 @@ public:
   {}
 
   /**
-   * This function assigns a scalar to this class.
+   * This function assigns a scalar to the current object.
    */
   DEAL_II_ALWAYS_INLINE
   VectorizedArray &
-  operator=(const Number scalar)
+  operator=(const Number scalar) &
   {
     data = scalar;
     return *this;
   }
 
+  /**
+   * Assign a scalar to the current object. This overload is used for
+   * rvalue references; because it does not make sense to assign
+   * something to a temporary, the function is deleted.
+   */
+  VectorizedArray &
+  operator=(const Number scalar) && = delete;
+
   /**
    * Access operator (only valid with component 0 in the base class without
    * specialization).
@@ -992,12 +1000,21 @@ public:
    */
   DEAL_II_ALWAYS_INLINE
   VectorizedArray &
-  operator=(const double x)
+  operator=(const double x) &
   {
     data = _mm512_set1_pd(x);
     return *this;
   }
 
+
+  /**
+   * Assign a scalar to the current object. This overload is used for
+   * rvalue references; because it does not make sense to assign
+   * something to a temporary, the function is deleted.
+   */
+  VectorizedArray &
+  operator=(const double scalar) && = delete;
+
   /**
    * Access operator.
    */
@@ -1571,12 +1588,20 @@ public:
    */
   DEAL_II_ALWAYS_INLINE
   VectorizedArray &
-  operator=(const float x)
+  operator=(const float x) &
   {
     data = _mm512_set1_ps(x);
     return *this;
   }
 
+  /**
+   * Assign a scalar to the current object. This overload is used for
+   * rvalue references; because it does not make sense to assign
+   * something to a temporary, the function is deleted.
+   */
+  VectorizedArray &
+  operator=(const float scalar) && = delete;
+
   /**
    * Access operator.
    */
@@ -2232,12 +2257,20 @@ public:
    */
   DEAL_II_ALWAYS_INLINE
   VectorizedArray &
-  operator=(const double x)
+  operator=(const double x) &
   {
     data = _mm256_set1_pd(x);
     return *this;
   }
 
+  /**
+   * Assign a scalar to the current object. This overload is used for
+   * rvalue references; because it does not make sense to assign
+   * something to a temporary, the function is deleted.
+   */
+  VectorizedArray &
+  operator=(const double scalar) && = delete;
+
   /**
    * Access operator.
    */
@@ -2770,12 +2803,20 @@ public:
    */
   DEAL_II_ALWAYS_INLINE
   VectorizedArray &
-  operator=(const float x)
+  operator=(const float x) &
   {
     data = _mm256_set1_ps(x);
     return *this;
   }
 
+  /**
+   * Assign a scalar to the current object. This overload is used for
+   * rvalue references; because it does not make sense to assign
+   * something to a temporary, the function is deleted.
+   */
+  VectorizedArray &
+  operator=(const float scalar) && = delete;
+
   /**
    * Access operator.
    */
@@ -3328,12 +3369,20 @@ public:
    */
   DEAL_II_ALWAYS_INLINE
   VectorizedArray &
-  operator=(const double x)
+  operator=(const double x) &
   {
     data = _mm_set1_pd(x);
     return *this;
   }
 
+  /**
+   * Assign a scalar to the current object. This overload is used for
+   * rvalue references; because it does not make sense to assign
+   * something to a temporary, the function is deleted.
+   */
+  VectorizedArray &
+  operator=(const double scalar) && = delete;
+
   /**
    * Access operator.
    */
@@ -3794,12 +3843,20 @@ public:
 
   DEAL_II_ALWAYS_INLINE
   VectorizedArray &
-  operator=(const float x)
+  operator=(const float x) &
   {
     data = _mm_set1_ps(x);
     return *this;
   }
 
+  /**
+   * Assign a scalar to the current object. This overload is used for
+   * rvalue references; because it does not make sense to assign
+   * something to a temporary, the function is deleted.
+   */
+  VectorizedArray &
+  operator=(const float scalar) && = delete;
+
   /**
    * Access operator.
    */
@@ -4274,11 +4331,11 @@ public:
   {}
 
   /**
-   * This function assigns a scalar to this class.
+   * This function assigns a scalar to the current object.
    */
   DEAL_II_ALWAYS_INLINE
   VectorizedArray &
-  operator=(const double x)
+  operator=(const double x) &
   {
     data = vec_splats(x);
 
@@ -4289,6 +4346,14 @@ public:
     return *this;
   }
 
+  /**
+   * Assign a scalar to the current object. This overload is used for
+   * rvalue references; because it does not make sense to assign
+   * something to a temporary, the function is deleted.
+   */
+  VectorizedArray &
+  operator=(const double scalar) && = delete;
+
   /**
    * Access operator. The component must be either 0 or 1.
    */
@@ -4521,11 +4586,11 @@ public:
   {}
 
   /**
-   * This function assigns a scalar to this class.
+   * This function assigns a scalar to the current object.
    */
   DEAL_II_ALWAYS_INLINE
   VectorizedArray &
-  operator=(const float x)
+  operator=(const float x) &
   {
     data = vec_splats(x);
 
@@ -4536,6 +4601,14 @@ public:
     return *this;
   }
 
+  /**
+   * Assign a scalar to the current object. This overload is used for
+   * rvalue references; because it does not make sense to assign
+   * something to a temporary, the function is deleted.
+   */
+  VectorizedArray &
+  operator=(const float scalar) && = delete;
+
   /**
    * Access operator. The component must be between 0 and 3.
    */

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.