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

This is the documentation for an old version of Boost. Click here to view this page for the latest version.

Function template make_default



// In header: <boost/make_default.hpp>

template<typename T> T make_default();


A considerable number of libraries require an instance of a class provided (storage created and initialized). For example,

Type result;
istream >> result;

In generic code that results in the Default Constructibility requirement imposed on every type 'Type' to be used with the respective code. Inevitably, that requirement a) either excludes all the classes that for various reasons do not meet that requirement or b) imposes certain (not necessarily desirable) design/implementation onto respective classes.

Deployment of boost::make_default() eliminates the Default Constructibility requirement with

Type result = boost::make_default<Type>();
istream >> result;

Classes with no default constructor can now be included via a boost::make_default() specialization:

namespace boost
    template<> inline Type make_default<Type>() { return Type(parameters); }