template <class T>
struct is_copy_constructible : public true_type-or-false_type {};
Наследники:Если<T>является (возможно, cv-квалифицированным) типом с конструктором копий, то наследуется отtrue_type, в противном случае наследуется отfalse_type. Тип<T>должен быть полным.
Иными словами, наследуется отtrue_typeтолько в том случае, если копировщик<T>не отмечен<=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)>, чтобы показать, что класс не копируем.
Эта черта не заботится о модификаторах доступа, поэтому, если вы видите такие ошибки:
'T::T(const T&)' is private
boost/type_traits/is_copy_constructible.hpp:68:5: error: within this context
Затем вы пытаетесь назвать этот макрос для структуры с частным конструктором:
struct T {
    
private:
    T(const T &);
    
};
Чтобы исправить это, вы должны изменить свою структуру, явно пометив ее как некопируемую (<=delete>,<boost::noncopyable>или<BOOST_MOVABLE_BUT_NOT_COPYABLE(T)>) или явноспециализированную черту.
Заголовок:<#include
       <boost/type_traits/is_copy_constructible.hpp>>или<#include<boost/type_traits.hpp>>