| [/ |
| Copyright 2015 John Maddock. |
| 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). |
| ] |
| |
| [section:is_constructible is_constructible] |
| |
| template <class T, class... Args> |
| struct is_constructible : public __tof {}; |
| |
| __inherit If `T` can be constructed from `Args`, |
| then inherits from __true_type, otherwise inherits from __false_type. Type `T` |
| must be a complete type. |
| |
| Formally the trait answers the question, is the expression: |
| |
| T t(std::declval<Args>()...); |
| |
| valid? |
| |
| There are a number of important special cases for this trait: |
| |
| is_constructible<T>::value |
| |
| Indicates whether `T` is default constructible, while: |
| |
| is_constructible<T, const T&>::value |
| |
| Indicates whether `T` is copy-constructible, and: |
| |
| is_constructible<T, T>::value |
| |
| Indicates whether `T` is move-constructible. |
| |
| |
| __compat This trait requires the C++11 features `decltype` variadic templates and SFINAE-expression support for full support. |
| While there is some fallback code for cases where this is not the case, the trait should really be considered broken in that case. |
| The header will define the macro `BOOST_TT_IS_CONSTRUCTIBLE_CONFORMING` when the full implementation is available. |
| |
| __header ` #include <boost/type_traits/is_copy_constructible.hpp>` or ` #include <boost/type_traits.hpp>` |
| |
| [endsect] |
| |