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