/*============================================================================= Copyright (c) 2015 Paul Fultz II construct.h 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) ==============================================================================*/ #ifndef BOOST_HOF_GUARD_CONSTRUCT_H #define BOOST_HOF_GUARD_CONSTRUCT_H /// construct /// ========= /// /// Description /// ----------- /// /// The `construct` function returns a function object that will construct the /// object when the called. A template can also be given, which it will deduce /// the parameters to the template. The `construct_meta` can be used to /// construct the object from a metafunction. /// /// Synopsis /// -------- /// /// // Construct by decaying each value /// template /// constexpr auto construct(); /// /// template class Template> /// constexpr auto construct(); /// /// // Construct by deducing lvalues by reference and rvalue reference by reference /// template /// constexpr auto construct_forward(); /// /// template class Template> /// constexpr auto construct_forward(); /// /// // Construct by deducing lvalues by reference and rvalues by value. /// template /// constexpr auto construct_basic(); /// /// template class Template> /// constexpr auto construct_basic(); /// /// // Construct by deducing the object from a metafunction /// template /// constexpr auto construct_meta(); /// /// template class MetafunctionTemplate> /// constexpr auto construct_meta(); /// /// Semantics /// --------- /// /// assert(construct()(xs...) == T(xs...)); /// assert(construct