diff options
Diffstat (limited to 'boost/hana/detail/create.hpp')
-rw-r--r-- | boost/hana/detail/create.hpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/boost/hana/detail/create.hpp b/boost/hana/detail/create.hpp new file mode 100644 index 0000000000..e98537eb44 --- /dev/null +++ b/boost/hana/detail/create.hpp @@ -0,0 +1,33 @@ +/*! +@file +Defines `boost::hana::detail::create`. + +@copyright Louis Dionne 2013-2016 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) + */ + +#ifndef BOOST_HANA_DETAIL_CREATE_HPP +#define BOOST_HANA_DETAIL_CREATE_HPP + +#include <boost/hana/config.hpp> +#include <boost/hana/detail/decay.hpp> + + +BOOST_HANA_NAMESPACE_BEGIN namespace detail { + //! @ingroup group-details + //! Implementation of the generic `std::make_xxx` pattern for arbitrary + //! `xxx`s. + template <template <typename ...> class T> + struct create { + template <typename ...X> + constexpr T<typename detail::decay<X>::type...> + operator()(X&& ...x) const { + return T<typename detail::decay<X>::type...>{ + static_cast<X&&>(x)... + }; + } + }; +} BOOST_HANA_NAMESPACE_END + +#endif // !BOOST_HANA_DETAIL_CREATE_HPP |