Commit b0ee5d90 authored by Alexander Alekhin's avatar Alexander Alekhin

core: CV_NODISCARD macro with semantic of [[nodiscard]] attr

[[nodiscard]] is defined in C++17.
There is fallback alias for modern GCC / Clang compilers.
parent 4a3dfffd
...@@ -406,6 +406,24 @@ Cv64suf; ...@@ -406,6 +406,24 @@ Cv64suf;
#endif #endif
/****************************************************************************************\
* CV_NODISCARD attribute *
* encourages the compiler to issue a warning if the return value is discarded (C++17) *
\****************************************************************************************/
#ifndef CV_NODISCARD
# if defined(__GNUC__)
# define CV_NODISCARD __attribute__((__warn_unused_result__)) // at least available with GCC 3.4
# elif defined(__clang__) && defined(__has_attribute)
# if __has_attribute(__warn_unused_result__)
# define CV_NODISCARD __attribute__((__warn_unused_result__))
# endif
# endif
#endif
#ifndef CV_NODISCARD
# define CV_NODISCARD /* nothing by default */
#endif
/****************************************************************************************\ /****************************************************************************************\
* C++ 11 * * C++ 11 *
\****************************************************************************************/ \****************************************************************************************/
......
...@@ -1171,7 +1171,7 @@ public: ...@@ -1171,7 +1171,7 @@ public:
The method creates a full copy of the array. The original step[] is not taken into account. So, the The method creates a full copy of the array. The original step[] is not taken into account. So, the
array copy is a continuous array occupying total()*elemSize() bytes. array copy is a continuous array occupying total()*elemSize() bytes.
*/ */
Mat clone() const; Mat clone() const CV_NODISCARD;
/** @brief Copies the matrix to another one. /** @brief Copies the matrix to another one.
...@@ -2262,7 +2262,7 @@ public: ...@@ -2262,7 +2262,7 @@ public:
Mat_ row(int y) const; Mat_ row(int y) const;
Mat_ col(int x) const; Mat_ col(int x) const;
Mat_ diag(int d=0) const; Mat_ diag(int d=0) const;
Mat_ clone() const; Mat_ clone() const CV_NODISCARD;
//! overridden forms of Mat::elemSize() etc. //! overridden forms of Mat::elemSize() etc.
size_t elemSize() const; size_t elemSize() const;
...@@ -2441,7 +2441,7 @@ public: ...@@ -2441,7 +2441,7 @@ public:
static UMat diag(const UMat& d); static UMat diag(const UMat& d);
//! returns deep copy of the matrix, i.e. the data is copied //! returns deep copy of the matrix, i.e. the data is copied
UMat clone() const; UMat clone() const CV_NODISCARD;
//! copies the matrix content to "m". //! copies the matrix content to "m".
// It calls m.create(this->size(), this->type()). // It calls m.create(this->size(), this->type()).
void copyTo( OutputArray m ) const; void copyTo( OutputArray m ) const;
...@@ -2736,7 +2736,7 @@ public: ...@@ -2736,7 +2736,7 @@ public:
SparseMat& operator = (const Mat& m); SparseMat& operator = (const Mat& m);
//! creates full copy of the matrix //! creates full copy of the matrix
SparseMat clone() const; SparseMat clone() const CV_NODISCARD;
//! copies all the data to the destination matrix. All the previous content of m is erased //! copies all the data to the destination matrix. All the previous content of m is erased
void copyTo( SparseMat& m ) const; void copyTo( SparseMat& m ) const;
...@@ -2973,7 +2973,7 @@ public: ...@@ -2973,7 +2973,7 @@ public:
SparseMat_& operator = (const Mat& m); SparseMat_& operator = (const Mat& m);
//! makes full copy of the matrix. All the elements are duplicated //! makes full copy of the matrix. All the elements are duplicated
SparseMat_ clone() const; SparseMat_ clone() const CV_NODISCARD;
//! equivalent to cv::SparseMat::create(dims, _sizes, DataType<_Tp>::type) //! equivalent to cv::SparseMat::create(dims, _sizes, DataType<_Tp>::type)
void create(int dims, const int* _sizes); void create(int dims, const int* _sizes);
//! converts sparse matrix to the old-style CvSparseMat. All the elements are copied //! converts sparse matrix to the old-style CvSparseMat. All the elements are copied
......
...@@ -61,7 +61,8 @@ PERF_TEST_P(Size_MatType, Mat_Clone, ...@@ -61,7 +61,8 @@ PERF_TEST_P(Size_MatType, Mat_Clone,
TEST_CYCLE() TEST_CYCLE()
{ {
source.clone(); Mat tmp = source.clone();
(void)tmp;
} }
destination = source.clone(); destination = source.clone();
...@@ -88,7 +89,8 @@ PERF_TEST_P(Size_MatType, Mat_Clone_Roi, ...@@ -88,7 +89,8 @@ PERF_TEST_P(Size_MatType, Mat_Clone_Roi,
TEST_CYCLE() TEST_CYCLE()
{ {
roi.clone(); Mat tmp = roi.clone();
(void)tmp;
} }
destination = roi.clone(); destination = roi.clone();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment