[/ 
  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_constructor has_trivial_constructor]

   template <class T>
   struct has_trivial_constructor : public __tof {};
  
   template <class T>
   struct has_trivial_default_constructor : public __tof {};
  
__inherit If T is a (possibly cv-qualified) type with a trivial default-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 default-constructor then the constructor have no effect: 
calls to the constructor can be safely omitted.  Note that using meta-programming
to omit a call to a single trivial-constructor call is of no benefit whatsoever. 
However, if loops and/or exception handling code can also be omitted, then some
benefit in terms of code size and speed can be obtained.

__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_constructor 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.1p6.

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

__examples

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

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

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

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

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

[endsect]

