]> AND Private Git Repository - canny.git/blob - stc/exp/ml_stc_linux_make_v1.0/include/boost/utility/enable_if.hpp
Logo AND Algorithmique Numérique Distribuée

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