Imported Upstream version 1.57.0
[platform/upstream/boost.git] / boost / log / expressions / is_keyword_descriptor.hpp
1 /*
2  *          Copyright Andrey Semashev 2007 - 2014.
3  * Distributed under the Boost Software License, Version 1.0.
4  *    (See accompanying file LICENSE_1_0.txt or copy at
5  *          http://www.boost.org/LICENSE_1_0.txt)
6  */
7 /*!
8  * \file   is_keyword_descriptor.hpp
9  * \author Andrey Semashev
10  * \date   14.07.2012
11  *
12  * The header contains attribute keyword descriptor detection trait.
13  */
14
15 #ifndef BOOST_LOG_EXPRESSIONS_IS_KEYWORD_DESCRIPTOR_HPP_INCLUDED_
16 #define BOOST_LOG_EXPRESSIONS_IS_KEYWORD_DESCRIPTOR_HPP_INCLUDED_
17
18 #include <boost/mpl/bool.hpp>
19 #include <boost/log/detail/config.hpp>
20 #include <boost/log/detail/header.hpp>
21
22 #ifdef BOOST_HAS_PRAGMA_ONCE
23 #pragma once
24 #endif
25
26 namespace boost {
27
28 BOOST_LOG_OPEN_NAMESPACE
29
30 namespace expressions {
31
32 /*!
33  * Base class for keyword descriptors. All keyword descriptors must derive from this class to support the \c is_keyword_descriptor trait.
34  */
35 struct keyword_descriptor
36 {
37 #ifndef BOOST_LOG_DOXYGEN_PASS
38     typedef void _is_boost_log_keyword_descriptor;
39 #endif // BOOST_LOG_DOXYGEN_PASS
40 };
41
42 /*!
43  * The metafunction detects if the type \c T is a keyword descriptor
44  */
45 template< typename T, typename VoidT = void >
46 struct is_keyword_descriptor :
47     public mpl::false_
48 {
49 };
50
51 #ifndef BOOST_LOG_DOXYGEN_PASS
52 template< typename T >
53 struct is_keyword_descriptor< T, typename T::_is_boost_log_keyword_descriptor > :
54     public mpl::true_
55 {
56 };
57 #endif
58
59 } // namespace expressions
60
61 BOOST_LOG_CLOSE_NAMESPACE // namespace log
62
63 } // namespace boost
64
65 #include <boost/log/detail/footer.hpp>
66
67 #endif // BOOST_LOG_EXPRESSIONS_IS_KEYWORD_DESCRIPTOR_HPP_INCLUDED_