diff options
Diffstat (limited to 'boost/type_traits/is_assignable.hpp')
-rw-r--r-- | boost/type_traits/is_assignable.hpp | 12 |
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>{}; |