1// (C) Copyright Gennadiy Rozental 2001.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at
4// http://www.boost.org/LICENSE_1_0.txt)
5
6// See http://www.boost.org/libs/test for the library home page.
7//
8// File : $RCSfile$
9//
10// Version : $Revision$
11//
12// Description : defines the is_cstring type trait
13// ***************************************************************************
14
15#ifndef BOOST_TEST_UTILS_IS_CSTRING_HPP
16#define BOOST_TEST_UTILS_IS_CSTRING_HPP
17
18// Boost
19#include <boost/mpl/bool.hpp>
20#include <boost/type_traits/is_same.hpp>
21#include <boost/type_traits/decay.hpp>
22#include <boost/type_traits/remove_pointer.hpp>
23
24//____________________________________________________________________________//
25
26namespace boost {
27namespace unit_test {
28
29// ************************************************************************** //
30// ************** is_cstring ************** //
31// ************************************************************************** //
32
33namespace ut_detail {
34
35template<typename T>
36struct is_cstring_impl : public mpl::false_ {};
37
38template<typename T>
39struct is_cstring_impl<T const*> : public is_cstring_impl<T*> {};
40
41template<typename T>
42struct is_cstring_impl<T const* const> : public is_cstring_impl<T*> {};
43
44template<>
45struct is_cstring_impl<char*> : public mpl::true_ {};
46
47template<>
48struct is_cstring_impl<wchar_t*> : public mpl::true_ {};
49
50} // namespace ut_detail
51
52template<typename T>
53struct is_cstring : public ut_detail::is_cstring_impl<typename decay<T>::type> {};
54
55} // namespace unit_test
56} // namespace boost
57
58#endif // BOOST_TEST_UTILS_IS_CSTRING_HPP
59