annotate DEPENDENCIES/generic/include/boost/core/enable_if.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents f46d142149f5
children
rev   line source
Chris@102 1 // Boost enable_if library
Chris@102 2
Chris@102 3 // Copyright 2003 (c) The Trustees of Indiana University.
Chris@102 4
Chris@102 5 // Use, modification, and distribution is subject to the Boost Software
Chris@102 6 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@102 7 // http://www.boost.org/LICENSE_1_0.txt)
Chris@102 8
Chris@102 9 // Authors: Jaakko Jarvi (jajarvi at osl.iu.edu)
Chris@102 10 // Jeremiah Willcock (jewillco at osl.iu.edu)
Chris@102 11 // Andrew Lumsdaine (lums at osl.iu.edu)
Chris@102 12
Chris@102 13
Chris@102 14 #ifndef BOOST_CORE_ENABLE_IF_HPP
Chris@102 15 #define BOOST_CORE_ENABLE_IF_HPP
Chris@102 16
Chris@102 17 #include "boost/config.hpp"
Chris@102 18
Chris@102 19 // Even the definition of enable_if causes problems on some compilers,
Chris@102 20 // so it's macroed out for all compilers that do not support SFINAE
Chris@102 21
Chris@102 22 #ifndef BOOST_NO_SFINAE
Chris@102 23
Chris@102 24 namespace boost
Chris@102 25 {
Chris@102 26
Chris@102 27 template <bool B, class T = void>
Chris@102 28 struct enable_if_c {
Chris@102 29 typedef T type;
Chris@102 30 };
Chris@102 31
Chris@102 32 template <class T>
Chris@102 33 struct enable_if_c<false, T> {};
Chris@102 34
Chris@102 35 template <class Cond, class T = void>
Chris@102 36 struct enable_if : public enable_if_c<Cond::value, T> {};
Chris@102 37
Chris@102 38 template <bool B, class T>
Chris@102 39 struct lazy_enable_if_c {
Chris@102 40 typedef typename T::type type;
Chris@102 41 };
Chris@102 42
Chris@102 43 template <class T>
Chris@102 44 struct lazy_enable_if_c<false, T> {};
Chris@102 45
Chris@102 46 template <class Cond, class T>
Chris@102 47 struct lazy_enable_if : public lazy_enable_if_c<Cond::value, T> {};
Chris@102 48
Chris@102 49
Chris@102 50 template <bool B, class T = void>
Chris@102 51 struct disable_if_c {
Chris@102 52 typedef T type;
Chris@102 53 };
Chris@102 54
Chris@102 55 template <class T>
Chris@102 56 struct disable_if_c<true, T> {};
Chris@102 57
Chris@102 58 template <class Cond, class T = void>
Chris@102 59 struct disable_if : public disable_if_c<Cond::value, T> {};
Chris@102 60
Chris@102 61 template <bool B, class T>
Chris@102 62 struct lazy_disable_if_c {
Chris@102 63 typedef typename T::type type;
Chris@102 64 };
Chris@102 65
Chris@102 66 template <class T>
Chris@102 67 struct lazy_disable_if_c<true, T> {};
Chris@102 68
Chris@102 69 template <class Cond, class T>
Chris@102 70 struct lazy_disable_if : public lazy_disable_if_c<Cond::value, T> {};
Chris@102 71
Chris@102 72 } // namespace boost
Chris@102 73
Chris@102 74 #else
Chris@102 75
Chris@102 76 namespace boost {
Chris@102 77
Chris@102 78 namespace detail { typedef void enable_if_default_T; }
Chris@102 79
Chris@102 80 template <typename T>
Chris@102 81 struct enable_if_does_not_work_on_this_compiler;
Chris@102 82
Chris@102 83 template <bool B, class T = detail::enable_if_default_T>
Chris@102 84 struct enable_if_c : enable_if_does_not_work_on_this_compiler<T>
Chris@102 85 { };
Chris@102 86
Chris@102 87 template <bool B, class T = detail::enable_if_default_T>
Chris@102 88 struct disable_if_c : enable_if_does_not_work_on_this_compiler<T>
Chris@102 89 { };
Chris@102 90
Chris@102 91 template <bool B, class T = detail::enable_if_default_T>
Chris@102 92 struct lazy_enable_if_c : enable_if_does_not_work_on_this_compiler<T>
Chris@102 93 { };
Chris@102 94
Chris@102 95 template <bool B, class T = detail::enable_if_default_T>
Chris@102 96 struct lazy_disable_if_c : enable_if_does_not_work_on_this_compiler<T>
Chris@102 97 { };
Chris@102 98
Chris@102 99 template <class Cond, class T = detail::enable_if_default_T>
Chris@102 100 struct enable_if : enable_if_does_not_work_on_this_compiler<T>
Chris@102 101 { };
Chris@102 102
Chris@102 103 template <class Cond, class T = detail::enable_if_default_T>
Chris@102 104 struct disable_if : enable_if_does_not_work_on_this_compiler<T>
Chris@102 105 { };
Chris@102 106
Chris@102 107 template <class Cond, class T = detail::enable_if_default_T>
Chris@102 108 struct lazy_enable_if : enable_if_does_not_work_on_this_compiler<T>
Chris@102 109 { };
Chris@102 110
Chris@102 111 template <class Cond, class T = detail::enable_if_default_T>
Chris@102 112 struct lazy_disable_if : enable_if_does_not_work_on_this_compiler<T>
Chris@102 113 { };
Chris@102 114
Chris@102 115 } // namespace boost
Chris@102 116
Chris@102 117 #endif // BOOST_NO_SFINAE
Chris@102 118
Chris@102 119 #endif