From b6e9d6f0d16e2a6a5ae6bcb8486f7b00c5677bbb Mon Sep 17 00:00:00 2001 From: Roland Winklmeier Date: Sat, 30 May 2015 18:06:19 +0200 Subject: [PATCH] Static assert in CVariant::from to if value type is CVariant --- src/blackmisc/variant.h | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/blackmisc/variant.h b/src/blackmisc/variant.h index 4c971419e..88969ab47 100644 --- a/src/blackmisc/variant.h +++ b/src/blackmisc/variant.h @@ -25,6 +25,7 @@ #include #include #include +#include namespace BlackMisc { @@ -215,10 +216,18 @@ namespace BlackMisc void swap(QVariant &other) { m_v.swap(other); } //! Construct a variant from a value. - template static CVariant fromValue(T &&value) { return CVariant(QVariant::fromValue(std::forward(value))); } + template static CVariant fromValue(T &&value) + { + static_assert(!std::is_same::value, "CVariant is an illegal type!"); + return CVariant(QVariant::fromValue(std::forward(value))); + } //! Synonym for fromValue(). - template static CVariant from(T &&value) { return CVariant(QVariant::fromValue(std::forward(value))); } + template static CVariant from(T &&value) + { + static_assert(!std::is_same::value, "CVariant is an illegal type!"); + return CVariant(QVariant::fromValue(std::forward(value))); + } //! Change the value. template void setValue(T &&value) { m_v.setValue(std::forward(value)); }