[/ 
  Copyright 2007 John Maddock.
  Distributed under the Boost Software License, Version 1.0.
  (See accompanying file LICENSE_1_0.txt or copy at
  http://www.boost.org/LICENSE_1_0.txt).
]

[section:has_trivial_copy has_trivial_copy]

   template <class T>
   struct has_trivial_copy : public __tof {};
  
   template <class T>
   struct has_trivial_copy_constructor : public __tof {};
  
__inherit If T is a (possibly cv-qualified) type with a trivial copy-constructor
then inherits from __true_type, otherwise inherits from __false_type.

These two traits are synonyms for each other.

If a type has a trivial copy-constructor then the constructor has the same effect
as copying the bits of one object to the other: 
calls to the constructor can be safely replaced with a call to `memcpy`.

__compat If the compiler does not support partial-specialization of class 
templates, then this template can not be used with function types.

Without some (as yet unspecified) help from the compiler, 
has_trivial_copy will never report that a user-defined class or struct has a 
trivial constructor; this is always safe, if possibly sub-optimal.  Currently 
(May 2005) only MWCW 9 and Visual C++ 8 have the necessary compiler __intrinsics to detect 
user-defined classes with trivial constructors.

__std_ref 12.8p6.

__header ` #include <boost/type_traits/has_trivial_copy.hpp>` or ` #include <boost/type_traits.hpp>`

__examples

[:`has_trivial_copy<int>` inherits from `__true_type`.]

[:`has_trivial_copy<char*>::type` is the type `__true_type`.]

[:`has_trivial_copy<int (*)(long)>::value` is an integral constant 
expression that evaluates to /true/.]

[:`has_trivial_copy<MyClass>::value` is an integral constant 
expression that evaluates to /false/.]

[:`has_trivial_copy<T>::value_type` is the type `bool`.]

[endsect]

