| /** |
| * D header file for interaction with C++ std::type_traits. |
| * |
| * Copyright: Copyright Digital Mars 2018. |
| * License: Distributed under the |
| * $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0). |
| * (See accompanying file LICENSE) |
| * Authors: Manu Evans |
| * Source: $(DRUNTIMESRC core/stdcpp/type_traits.d) |
| */ |
| |
| module core.stdcpp.type_traits; |
| |
| extern(C++, "std"): |
| |
| /// |
| struct integral_constant(T, T Val) |
| { |
| /// |
| enum T value = Val; |
| /// |
| alias value_type = T; |
| /// |
| alias type = typeof(this); |
| } |
| |
| /// |
| alias bool_constant(bool b) = integral_constant!(bool, b); |
| |
| // Useful for dealing with enable_if constraints. |
| /// |
| alias true_type = bool_constant!true; |
| /// |
| alias false_type = bool_constant!false; |
| |
| /// |
| struct is_empty(T) |
| { |
| static if (is(T == struct)) |
| private enum __is_empty = T.tupleof.length == 0; |
| else |
| private enum __is_empty = false; |
| |
| /// |
| enum bool value = __is_empty; |
| /// |
| alias value_type = bool; |
| /// |
| alias type = integral_constant!(bool, value); |
| } |