54 lines
2.9 KiB
Plaintext
54 lines
2.9 KiB
Plaintext
[/
|
|
(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]
|