1
2// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
3// Use, modification and distribution are subject to the Boost Software License,
4// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
5// http://www.boost.org/LICENSE_1_0.txt).
6//
7// See http://www.boost.org/libs/type_traits for most recent version including documentation.
8
9#ifndef BOOST_TT_ADD_POINTER_HPP_INCLUDED
10#define BOOST_TT_ADD_POINTER_HPP_INCLUDED
11
12#include <boost/type_traits/remove_reference.hpp>
13
14namespace boost {
15
16#if defined(__BORLANDC__) && (__BORLANDC__ < 0x5A0)
17//
18// For some reason this implementation stops Borlands compiler
19// from dropping cv-qualifiers, it still fails with references
20// to arrays for some reason though (shrug...) (JM 20021104)
21//
22template <typename T>
23struct add_pointer
24{
25 typedef T* type;
26};
27template <typename T>
28struct add_pointer<T&>
29{
30 typedef T* type;
31};
32template <typename T>
33struct add_pointer<T&const>
34{
35 typedef T* type;
36};
37template <typename T>
38struct add_pointer<T&volatile>
39{
40 typedef T* type;
41};
42template <typename T>
43struct add_pointer<T&const volatile>
44{
45 typedef T* type;
46};
47
48#else
49
50template <typename T>
51struct add_pointer
52{
53 typedef typename remove_reference<T>::type no_ref_type;
54 typedef no_ref_type* type;
55};
56
57#endif
58
59#if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
60
61 template <class T> using add_pointer_t = typename add_pointer<T>::type;
62
63#endif
64
65} // namespace boost
66
67#endif // BOOST_TT_ADD_POINTER_HPP_INCLUDED
68