[variadic templates]feature request: n-th element of expansion
Larry Evans
cppljevans@suddenlink.net
Tue Nov 17 14:37:00 GMT 2009
As mentioned in a post of comp.std.c++:
http://preview.tinyurl.com/yaqvnnq
there's a need for some way to get the nth element of a pack
expansion. For example, boost::mpl::arg:
http://www.boost.org/doc/libs/1_40_0/libs/mpl/doc/refmanual/arg.html
wouldn't need the preprocessor for its implementation. Instead, using
something like the following grammar production:
get-nth-expansion-element:
expansion-pattern '...[' constant-expression ']'
where:
expansion-pattern is the "pattern of the expansion" described
on p. 327 of:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n3000.pdf
constant-expression is defined here:
http://www.csci.csusb.edu/dick/c++std/cd2/gram.html#gram.expr
then boost::mpl::arg would be simply implemented as:
template< int n > struct arg
{
template< typename A...>
struct apply
{
typedef A...[n] type;
};
};
where:
A is parsed as a expansion-pattern.
n is parsed as a constant-expression.
Could g++ provide this feature? How hard would it be to implement. I
would think it would just involve defining a new token:
...[
and then, wherever a expansion-pattern is currently parsed, this
would be followed by a test for whether the next token
is:
...
or:
...[
TIA.
-regards,
Larry
More information about the Gcc
mailing list