/*============================================================================= Copyright (c) 2011-2016 Bolero MURAKAMI https://github.com/bolero-MURAKAMI/Sprout 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 SPROUT_STRING_MAKE_STRING_HPP #define SPROUT_STRING_MAKE_STRING_HPP #include #include #include #include #include #include namespace sprout { namespace detail { enum make_string_t { make_string_in_head_type }; } // namespace detail // // make_string // template inline SPROUT_CONSTEXPR sprout::basic_string::type, 0> make_string() { return sprout::basic_string::type, 0>(); } template inline SPROUT_CONSTEXPR sprout::basic_string::type, N> make_string() { return sprout::basic_string::type, N>(); } template inline SPROUT_CONSTEXPR sprout::basic_string::type, 1 + sizeof...(Tail)> make_string(Head&& head, Tail&&... tail) { typedef sprout::detail::make_construct_impl< sprout::basic_string::type, 1 + sizeof...(Tail)> > impl_type; return impl_type::make(SPROUT_FORWARD(Head, head), SPROUT_FORWARD(Tail, tail)...); } template inline SPROUT_CONSTEXPR sprout::basic_string::type, N> make_string(Head&& head, Tail&&... tail) { typedef sprout::detail::make_construct_impl< sprout::basic_string::type, N> > impl_type; return impl_type::make(SPROUT_FORWARD(Head, head), SPROUT_FORWARD(Tail, tail)...); } template inline SPROUT_CONSTEXPR sprout::basic_string::type, 1 + sizeof...(Tail)> make_string(Head&& head, Tail&&... tail) { typedef sprout::detail::make_construct_impl< sprout::basic_string::type, 1 + sizeof...(Tail)> > impl_type; return impl_type::make(SPROUT_FORWARD(Head, head), SPROUT_FORWARD(Tail, tail)...); } template inline SPROUT_CONSTEXPR sprout::basic_string::type, N> make_string(Head&& head, Tail&&... tail) { typedef sprout::detail::make_construct_impl< sprout::basic_string::type, N> > impl_type; return impl_type::make(SPROUT_FORWARD(Head, head), SPROUT_FORWARD(Tail, tail)...); } } // namespace sprout #endif // #ifndef SPROUT_STRING_MAKE_STRING_HPP