summaryrefslogtreecommitdiff
path: root/boost/type_traits/is_assignable.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/type_traits/is_assignable.hpp')
-rw-r--r--boost/type_traits/is_assignable.hpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/boost/type_traits/is_assignable.hpp b/boost/type_traits/is_assignable.hpp
index 49d171616a..6a9474b2fd 100644
--- a/boost/type_traits/is_assignable.hpp
+++ b/boost/type_traits/is_assignable.hpp
@@ -12,6 +12,8 @@
#include <cstddef> // size_t
#include <boost/type_traits/integral_constant.hpp>
#include <boost/detail/workaround.hpp>
+#include <boost/type_traits/is_complete.hpp>
+#include <boost/static_assert.hpp>
namespace boost{
@@ -39,7 +41,10 @@ namespace boost{
}
- template <class T, class U> struct is_assignable : public integral_constant<bool, sizeof(detail::is_assignable_imp::test<T, U>(0)) == sizeof(boost::type_traits::yes_type)>{};
+ template <class T, class U> struct is_assignable : public integral_constant<bool, sizeof(detail::is_assignable_imp::test<T, U>(0)) == sizeof(boost::type_traits::yes_type)>
+ {
+ BOOST_STATIC_ASSERT_MSG(boost::is_complete<T>::value, "Arguments to is_assignable must be complete types");
+ };
template <class T, std::size_t N, class U> struct is_assignable<T[N], U> : public is_assignable<T, U>{};
template <class T, std::size_t N, class U> struct is_assignable<T(&)[N], U> : public is_assignable<T&, U>{};
template <class T, class U> struct is_assignable<T[], U> : public is_assignable<T, U>{};
@@ -57,7 +62,10 @@ namespace boost{
namespace boost{
// We don't know how to implement this:
- template <class T, class U> struct is_assignable : public integral_constant<bool, false>{};
+ template <class T, class U> struct is_assignable : public integral_constant<bool, false>
+ {
+ BOOST_STATIC_ASSERT_MSG(boost::is_complete<T>::value, "Arguments to is_assignable must be complete types");
+ };
template <class T, class U> struct is_assignable<T&, U> : public integral_constant<bool, is_pod<T>::value && is_pod<typename remove_reference<U>::type>::value>{};
template <class T, class U> struct is_assignable<const T&, U> : public integral_constant<bool, false>{};
template <class U> struct is_assignable<void, U> : public integral_constant<bool, false>{};