Boost C++ Libraries of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Click here to view the latest version of this page.


template <class T>
struct is_copy_constructible : public true_type-or-false_type {};

Inherits: If T is a (possibly cv-qualified) type with a copy constructor, then inherits from true_type, otherwise inherits from false_type. Type T must be a complete type.

In other words, inherits from true_type only if copy constructor of T not marked with = delete, T does not derives from boost::noncopyable and does not marked with BOOST_MOVABLE_BUT_NOT_COPYABLE(T).

Compiler Compatibility: If the compiler does not support partial-specialization of class templates, then this template can not be used.

If your compiler does not support C++11 deleted functions (= delete) or does not support SFINAE for the deleted constructors, then derive your classes from boost::noncopyable or mark them with BOOST_MOVABLE_BUT_NOT_COPYABLE(T) to show that class is noncopyable.

Trait does not care about access modifiers, so if you see errors like this:

'T::T(const T&)' is private
boost/type_traits/is_copy_constructible.hpp:68:5: error: within this context

then you are trying to call that macro for a structure with private constructor:

struct T {
    // ...
    T(const T &);
    // ...

To fix that you must modify your structure, explicitly marking it as noncopyable (= delete, boost::noncopyable or BOOST_MOVABLE_BUT_NOT_COPYABLE(T)) or explicitly specialize trait.

Header: #include <boost/type_traits/is_copy_constructible.hpp> or #include <boost/type_traits.hpp>