## Function template make_default

boost::make_default

## Synopsis

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

    template<typename T> T make_default();

## Description

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); }
    }