I was mucking around the other day and discovered this nice little oddity:
template <typename... Args> void foo(Args......);
As it turns out,
...... can be totally valid C++11. This is what happens when backward compatibility mixes with new hotness.
// These are all equivalent. template <typename... Args> void foo1(Args......); template <typename... Args> void foo2(Args... ...); template <typename... Args> void foo3(Args..., ...);
Hopefully the last one shows what is happening here. This is two ellipsis operators, one for varadiac templates, and the second for old C-style varargs. Needless to say, I really hope you never need to use this, but if you do, I really hope you’ve carefully exhausted all other options.
I really wanted to end this post with an example of something at least believably useful, but that was almost impossible.