DxLibEx
first_enabled.hpp
Go to the documentation of this file.
1 /*=============================================================================
2  Copyright (C) 2015-2017 DxLibEx project
3  https://github.com/Nagarei/DxLibEx/
4 
5  Distributed under the Boost Software License, Version 1.0.
6  (See http://www.boost.org/LICENSE_1_0.txt)
7 =============================================================================*/
8 #ifndef DXLE_INC_TYPE_TRAITS_FIRST_ENABLED_HPP_
9 #define DXLE_INC_TYPE_TRAITS_FIRST_ENABLED_HPP_
10 #include <type_traits>
11 namespace dxle {
13 namespace type_traits {
14 
31  template<typename ...Args>
32  struct first_enabled {};
33 
34  template<typename T, typename ...Args>
35  struct first_enabled<std::enable_if<true, T>, Args...> { using type = T; };
36  template<typename T, typename ...Args>
37  struct first_enabled<std::enable_if<false, T>, Args...> : first_enabled<Args...> {};
38  template<typename T, typename ...Args>
39  struct first_enabled<T, Args...> { using type = T; };
40 
41  template<typename ...Args>
42  using first_enabled_t = typename first_enabled<Args...>::type;
43 
44 }//namespace
45 using namespace type_traits;
46 }
47 #endif //DXLE_INC_TYPE_TRAITS_FIRST_ENABLED_HPP_
multi-conditional if struct for TMP. This class is used in conjunction with std::enable_if.
Definition: point2d.hpp:672
Definition: cast_if.hpp:12
typename first_enabled< Args... >::type first_enabled_t