template <class T>
struct is_copy_assignable : public true_type-or-false_type
{};
Наследники:Если<T
>является<CopyAssignable
>(т.е. имеет доступный явный или неявный оператор присвоения копий), то наследует отtrue_type, в противном случае наследует отfalse_type. Тип<T
>должен быть полным.
Иными словами, наследуется отtrue_typeтолько в том случае, если копия<T
>от<constT
&
>не отмечена<=delete
>,<T
>не происходит от<boost::noncopyable
>и не отмечена<BOOST_MOVABLE_BUT_NOT_COPYABLE(T)
>.
Совместимость компиляторов:Для полной поддержки требуются функции C++11<decltype
>и SFINAE-выражения.
Если ваш компилятор не поддерживает удаленные функции C++11<=delete
>или не поддерживает SFINAE для удаленных назначений, то выведите свои классы из<boost::noncopyable
>или пометьте их<BOOST_MOVABLE_BUT_NOT_COPYABLE(T)
>, чтобы показать, что класс не назначается.
Trait не заботится о модификаторах доступа, поэтому, если вы видите такие ошибки:
'T::operator=(const T&)' is private
boost/type_traits/is_copy_assignable.hpp:68:5: error: within this context
Затем вы пытаетесь назвать этот макрос структурой с частным назначением:
struct T {
private:
T &operator=(const T &);
};
Чтобы исправить это, вы должны изменить свою структуру, явно пометив ее как некопируемую<=delete
>,<boost::noncopyable
>или<BOOST_MOVABLE_BUT_NOT_COPYABLE(T)
>или явно, специализирующуюся на признаке.
Заголовок:<#include
<boost/type_traits/is_copy_assignable.hpp>
>или<#include<boost/type_traits.hpp>
>