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>>