1 /* 2 * Copyright Andrey Semashev 2007 - 2015. 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_ 68