1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- [/
- (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_design Design]
- The initial impetus for creating this library was entirely practical. I had been
- working on another library of macro functionality, which used Boost PP
- functionality, and I realized that if I could use variadic macros with
- my other library, the end-user usability for that library would be easier.
- Therefore the initial main design goal of this library was to interoperate variadic macro data
- with Boost PP in the easiest and clearest way possible.
- This led to the original versions of the library as an impetus for
- adding variadic macro data support to Boost PP. While this was being done,
- but the variadic macro data support had not yet been finalized in Boost PP,
- I still maintained the library in two modes, either its own variadic data
- functionality or deferring to the implementation of variadic macros in the
- Boost PP library.
- Once support for variadic data had been added to Boost PP I stripped
- down the functionality of this library to only include variadic macro
- support for functionality which was an adjunct to the support in Boost PP.
- This functionality might be seen as experimental, since it largely relied on a macro
- which tested for empty input which Paul Mensonides, the author of Boost PP, had
- published on the Internet, and which by the very nature of the C++ preprocessor
- is slightly flawed but which was the closest approximation of such functionality
- which I believed could be made. I had to tweak this macro somewhat for the Visual C++
- preprocessor, whose conformance to the C++ standard for macro processing is notably
- incorrect in a number of areas. But I still felt this functionality could be used
- in select situations and might be useful to others. Using this functionality
- I was able to build up some other macros which tested for the various Boost PP
- data types. I also was able to add in functionality, based on Paul Mendsonides
- excellent work, for handling tuples in preprocessing data.
- All of this particular functionality is impossible to do effectively
- without the use of variadic macros. But I had kept these features at a
- minimum because of the difficulty of using variadic macros with compilers,
- most notably Visual C++, whose implementation of variadic macros is
- substandard and therefore very difficult to get to work correctly when
- variadic macros must be used.
- I then realized that if I am going to have a library which takes advantage
- of variadic macros I should see what I could do in the area of parsing
- preprocessor data. This has led to a reorganization of the library as
- a set of macros largely for parsing preprocessor data. All of this is now built
- on top of my use of the almost perfect checking for emptiness which Paul
- Mensonides originally created.
- [endsect]
|