is_constructible.pass.cpp revision 6063ec176d5056683d6ddd310c2e3a8f1c7e1b46
1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// type_traits
11
12// template <class T, class... Args>
13//   struct is_constructible;
14
15#include <type_traits>
16
17struct A
18{
19    explicit A(int);
20    A(int, double);
21private:
22    A(char);
23};
24
25int main()
26{
27    static_assert((std::is_constructible<int>::value), "");
28    static_assert((std::is_constructible<int, const int>::value), "");
29    static_assert((std::is_constructible<A, int>::value), "");
30    static_assert((std::is_constructible<A, int, double>::value), "");
31    static_assert((!std::is_constructible<A>::value), "");
32    static_assert((!std::is_constructible<A, char>::value), "");
33    static_assert((!std::is_constructible<A, void>::value), "");
34    static_assert((!std::is_constructible<void>::value), "");
35    static_assert((!std::is_constructible<int&>::value), "");
36    static_assert(( std::is_constructible<int&, int&>::value), "");
37}
38