1
2// (C) Copyright Edward Diener 2011,2012,2013
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#if !defined(BOOST_TTI_HAS_STATIC_MEMBER_DATA_HPP)
8#define BOOST_TTI_HAS_STATIC_MEMBER_DATA_HPP
9
10#include <boost/config.hpp>
11#include <boost/preprocessor/cat.hpp>
12#include <boost/tti/gen/has_static_member_data_gen.hpp>
13#include <boost/tti/detail/dstatic_mem_data.hpp>
14
15/*
16
17 The succeeding comments in this file are in doxygen format.
18
19*/
20
21/** \file
22*/
23
24/// A macro which expands to a metafunction which tests whether a static member data with a particular name and type exists.
25/**
26
27 BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_DATA is a macro which expands to a metafunction.
28 The metafunction tests whether static member data with a particular
29 name and type exists. The macro takes the form of BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_DATA(trait,name) where
30
31 trait = the name of the metafunction <br/>
32 name = the name of the inner member.
33
34 BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_DATA generates a metafunction called "trait" where 'trait' is the macro parameter.
35
36 @code
37
38 template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_TYPE>
39 struct trait
40 {
41 static const value = unspecified;
42 typedef mpl::bool_<true-or-false> type;
43 };
44
45 The metafunction types and return:
46
47 BOOST_TTI_TP_T = the enclosing type.
48 The enclosing type can be a class, struct, or union.
49 If the type is a union, static member data can only
50 be found if the C++11 unrestricted union is implemented
51 by the compiler being used, since prior to C++11 a union
52 could not have static data members.
53
54 BOOST_TTI_TP_TYPE = the type of the static member data.
55
56 returns = 'value' is true if the 'name' exists,
57 with the BOOST_TTI_TP_TYPE type,
58 within the enclosing BOOST_TTI_TP_T type,
59 otherwise 'value' is false.
60
61 @endcode
62
63*/
64#define BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_DATA(trait,name) \
65 BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_DATA(trait,name) \
66 template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_TYPE> \
67 struct trait \
68 { \
69 typedef typename \
70 BOOST_PP_CAT(trait,_detail_hsd)<BOOST_TTI_TP_T,BOOST_TTI_TP_TYPE>::type type; \
71 BOOST_STATIC_CONSTANT(bool,value=type::value); \
72 }; \
73/**/
74
75/// A macro which expands to a metafunction which tests whether a static member data with a particular name and type exists.
76/**
77
78 BOOST_TTI_HAS_STATIC_MEMBER_DATA is a macro which expands to a metafunction.
79 The metafunction tests whether static member data with a particular
80 name and type exists. The macro takes the form of BOOST_TTI_HAS_STATIC_MEMBER_DATA(name) where
81
82 name = the name of the inner member.
83
84 BOOST_TTI_HAS_STATIC_MEMBER_DATA generates a metafunction called "has_static_member_data_name" where 'name' is the macro parameter.
85
86 @code
87
88 template<class BOOST_TTI_TP_T,class BOOST_TTI_TP_TYPE>
89 struct has_static_member_data_'name'
90 {
91 static const value = unspecified;
92 typedef mpl::bool_<true-or-false> type;
93 };
94
95 The metafunction types and return:
96
97 BOOST_TTI_TP_T = the enclosing type.
98 The enclosing type can be a class, struct, or union.
99 If the type is a union, static member data can only
100 be found if the C++11 unrestricted union is implemented
101 by the compiler being used, since prior to C++11 a union
102 could not have static data members.
103
104 BOOST_TTI_TP_TYPE = the type of the static member data.
105
106 returns = 'value' is true if the 'name' exists,
107 with the appropriate BOOST_TTI_TP_TYPE type,
108 within the enclosing BOOST_TTI_TP_T type,
109 otherwise 'value' is false.
110
111 @endcode
112
113*/
114#define BOOST_TTI_HAS_STATIC_MEMBER_DATA(name) \
115 BOOST_TTI_TRAIT_HAS_STATIC_MEMBER_DATA \
116 ( \
117 BOOST_TTI_HAS_STATIC_MEMBER_DATA_GEN(name), \
118 name \
119 ) \
120/**/
121
122#endif // BOOST_TTI_HAS_STATIC_MEMBER_DATA_HPP
123

source code of boost/libs/tti/include/boost/tti/has_static_member_data.hpp