#include <iostream>
#include <initializer_list>
#include <array>
#include <iterator>
#include <algorithm>
void InitializerWork ( std:: initializer_list < int > arginit ) {
for ( auto ip = arginit.begin ( ) ; ip ! = arginit.end ( ) ; ++ ip ) {
std:: cout << * ip << std:: endl ;
}
std:: cout << "So that's an initializer_list..." << std:: endl ;
}
template < typename TDesired, typename T, std:: size_t n>
void GetArg ( const std:: array < T, n> table, std:: size_t & idx, const T& arg ) {
table[ idx++ ] = & arg;
}
template < typename ...Args >
void VariadicWork ( Args... args ) {
std:: array < const int * , sizeof ...( args) > argtable;
std:: size_t index = 0 ;
// ... What do?
GetArg< int > ( & argtable, index, args... ) ;
for ( auto ip = argtable.begin ( ) ; ip ! = argtable.end ( ) ++ ip ) {
std:: cout << * ip << std:: endl ;
}
std:: cout << "That's... everything, I think." << std:: endl ;
}
int main ( int argc, char * argv[ ] ) {
InitializerWork( { 20 , 40 , 80 } ) ;
VariadicWork( 20 , 40 , 80 ) ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KI2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+CgoKdm9pZCBJbml0aWFsaXplcldvcmsgKCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8aW50PiBhcmdpbml0ICkgewogICAgZm9yICggYXV0byBpcCA9IGFyZ2luaXQuYmVnaW4oKTsgaXAgIT0gYXJnaW5pdC5lbmQoKTsgKytpcCApIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgKmlwIDw8IHN0ZDo6ZW5kbDsgCiAgICB9CiAgICBzdGQ6OmNvdXQgPDwgIlNvIHRoYXQncyBhbiBpbml0aWFsaXplcl9saXN0Li4uIiA8PCBzdGQ6OmVuZGw7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFREZXNpcmVkLCB0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBuPgp2b2lkIEdldEFyZyAoIGNvbnN0IHN0ZDo6YXJyYXk8VCwgbj4gdGFibGUsIHN0ZDo6c2l6ZV90JiBpZHgsIGNvbnN0IFQmIGFyZyApIHsKICAgIHRhYmxlW2lkeCsrXSA9ICZhcmc7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSAuLi5BcmdzPgp2b2lkIFZhcmlhZGljV29yayAoIEFyZ3MuLi4gYXJncyApIHsKICAgIHN0ZDo6YXJyYXk8Y29uc3QgaW50Kiwgc2l6ZW9mLi4uKGFyZ3MpPiBhcmd0YWJsZTsKICAgIHN0ZDo6c2l6ZV90IGluZGV4ID0gMDsKICAgIC8vIC4uLiBXaGF0IGRvPwogICAgR2V0QXJnPGludD4oICZhcmd0YWJsZSwgaW5kZXgsIGFyZ3MuLi4gKTsKICAgIGZvciAoIGF1dG8gaXAgPSBhcmd0YWJsZS5iZWdpbigpOyBpcCAhPSBhcmd0YWJsZS5lbmQoKSArK2lwICkgewogICAgICAgIHN0ZDo6Y291dCA8PCAqaXAgPDwgc3RkOjplbmRsOwogICAgfQogICAgc3RkOjpjb3V0IDw8ICJUaGF0J3MuLi4gZXZlcnl0aGluZywgSSB0aGluay4iIDw8IHN0ZDo6ZW5kbDsKfQoKCmludCBtYWluIChpbnQgYXJnYywgY2hhciogYXJndltdKSB7CiAgICAKICAgIEluaXRpYWxpemVyV29yayggeyAyMCwgNDAsIDgwIH0gKTsKICAgIFZhcmlhZGljV29yayggMjAsIDQwLCA4MCApOwogICAgCn0=
compilation info
prog.cpp: In function 'void VariadicWork(Args ...)':
prog.cpp:26:62: error: expected ';' before 'ip'
prog.cpp: In function 'void VariadicWork(Args ...) [with Args = {int, int, int}]':
prog.cpp:36:30: instantiated from here
prog.cpp:25:5: error: no matching function for call to 'GetArg(std::array<const int*, 3u>*, size_t&, int&, int&, int&)'
prog.cpp:36:30: instantiated from here
prog.cpp:26:36: error: lvalue required as increment operand
stdout