<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#">
<link rel="alternate" type="text/html" href="https://gamma.unpythonic.net/"/>

<title>Jeff Epler's blog</title>
<modified>2009-05-12T14:33:32Z</modified>
<tagline>Photos, electronics, cnc, and more</tagline>
<author><name>Jeff Epler</name><email>jepler@unpythonic.net</email></author>
<entry>
<title>g++ trick for initializer lists</title>
<issued>2009-05-12T14:33:32Z</issued>
<modified>2009-05-12T14:33:32Z</modified>
<id>https://gamma.unpythonic.net/01242138812</id>
<link rel="alternate" type="text/html" href="https://gamma.unpythonic.net/01242138812"/>
<content type="text/html" mode="escaped">

A couple of g++ extensions can give something like the proposed c++0x initializer lists, at least when it comes to initializing sets and vectors.
&lt;pre&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;set&amp;gt;

#define ARRAY_ELEM(x) (sizeof(x) / sizeof(*x))
#define ARRAY_END(x) (x + sizeof(x) / sizeof(*x))
#define MAKE_CONTAINER(T, i, ...) ({ \
    static const __typeof__(i) _arr[] = {i,##__VA_ARGS__}; \
    T(_arr, ARRAY_END(_arr)); \
})
#define MAKE_SET(i, ...) MAKE_CONTAINER(std::set&amp;lt;__typeof__(i)&amp;gt;,i,##__VA_ARGS__)

#define IN(v,c) (c.find(v) != c.end())
int main(void) {
    std::set&amp;lt;int&amp;gt; s(MAKE_SET(1,3,7,21,13));

    for(int i=0; i&amp;lt;30; i++)
        if(IN(i,s))
            std::cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &quot; &quot;;
    std::cout &amp;lt;&amp;lt; &quot;\n&quot;;
    return 0;
}
&lt;/pre&gt;
</content>
</entry>
</feed>
