1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- [/
- (C) Copyright Edward Diener 2011-2015
- Distributed under the Boost Software License, Version 1.0.
- (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt).
- ]
- [section:vmd_type Types]
- A subset of identifiers is VMD types, called a 'v-type'. These are identifiers
- which represent all of the preprocessor data types which VMD can parse. This subset of
- identifiers is automatically registered and pre-detected by VMD. Each identifier
- type begins with the unique prefix 'BOOST_VMD_TYPE_'.
- The actual types are:
- * BOOST_VMD_TYPE_EMPTY, represents emptiness, ie. "empty data"
- * BOOST_VMD_TYPE_ARRAY, a Boost PP array
- * BOOST_VMD_TYPE_LIST, a Boost PP list
- * BOOST_VMD_TYPE_SEQ, a Boost PP seq
- * BOOST_VMD_TYPE_TUPLE, a Boost PP tuple
- * BOOST_VMD_TYPE_IDENTIFIER, identifier
- * BOOST_BMD_TYPE_NUMBER, a number
- * BOOST_VMD_TYPE_TYPE, a type itself
- * BOOST_VMD_TYPE_SEQUENCE, a sequence
- * BOOST_VMD_TYPE_UNKNOWN, an unknown type
- Since a v-type is itself an identifier the particular constraint on the input
- to test is exactly the same as for identifiers.
-
- The constraint is that the beginning input character, ignoring any whitespace, passed
- as the input to test must be either:
- * an identifier character, ie. an alphanumeric or an underscore
- * the left parenthesis of a tuple
- and if the first character is not the left parenthesis of a tuple
- the remaining characters must be alphanumeric or an underscore until a space character
- or end of input occurs.
- If this is not the case the behavior is undefined, and most likely
- a preprocessing error will occur.
- The macro used to test for a particular type in VMD is called BOOST_VMD_IS_TYPE.
- The macro takes a single parameter, the input to test against.
- The macro returns 1 if the parameter is a v-type, otherwise the macro returns 0.
- A v-type is also an identifier, which has been registered and pre-detected,
- so you can also use the VMD functionality which works with identifiers to work with
- a v-type as an identifier if you like.
- [heading Example]
- Let us look at an example of how to use BOOST_VMD_IS_TYPE.
- #include <boost/vmd/is_type.hpp>
-
- BOOST_VMD_IS_TYPE(input)
-
- returns:
-
- if input = BOOST_VMD_TYPE_SEQ, 1
- if input = BOOST_VMD_TYPE_NUMBER, 1
- if input = SQUARE, 0
- if input = BOOST_VMD_TYPE_IDENTIFIER DATA, 0 since there are tokens after the type
- if input = %44, does not meet the constraint therefore undefined behavior
- if input = ( BOOST_VMD_TYPE_EMPTY ), 0 since the macro begins with a tuple and this can be tested for
- [heading Usage]
- To use the BOOST_VMD_IS_TYPE macro either include the general header:
- #include <boost/vmd/vmd.hpp>
-
- or include the specific header:
- #include <boost/vmd/is_type.hpp>
- [endsect]
|