1 | ////////////////////////////////////////////////////////////////////////////// |
2 | // |
3 | // Copyright (C) 2011-2013 Vicente J. Botet Escriba |
4 | // |
5 | // Distributed under the Boost Software License, Version 1.0. (See accompanying |
6 | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
7 | // |
8 | // See http://www.boost.org/libs/thread for documentation. |
9 | // |
10 | ////////////////////////////////////////////////////////////////////////////// |
11 | |
12 | #ifndef BOOST_THREAD_DETAIL_IS_CONVERTIBLE_HPP |
13 | #define BOOST_THREAD_DETAIL_IS_CONVERTIBLE_HPP |
14 | |
15 | #include <boost/type_traits/is_convertible.hpp> |
16 | #include <boost/thread/detail/move.hpp> |
17 | |
18 | namespace boost |
19 | { |
20 | namespace thread_detail |
21 | { |
22 | template <typename T1, typename T2> |
23 | struct is_convertible : boost::is_convertible<T1,T2> {}; |
24 | |
25 | #if defined BOOST_NO_CXX11_RVALUE_REFERENCES |
26 | |
27 | #if defined(BOOST_INTEL_CXX_VERSION) && (BOOST_INTEL_CXX_VERSION <= 1300) |
28 | |
29 | #if defined BOOST_THREAD_USES_MOVE |
30 | template <typename T1, typename T2> |
31 | struct is_convertible< |
32 | rv<T1> &, |
33 | rv<rv<T2> > & |
34 | > : false_type {}; |
35 | #endif |
36 | |
37 | #elif defined __GNUC__ && (__GNUC__ < 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ <= 4 )) |
38 | |
39 | template <typename T1, typename T2> |
40 | struct is_convertible<T1&, T2&> : boost::is_convertible<T1, T2> {}; |
41 | #endif |
42 | |
43 | #endif |
44 | } |
45 | |
46 | } // namespace boost |
47 | |
48 | |
49 | #endif // BOOST_THREAD_DETAIL_MEMORY_HPP |
50 | |