Use brace-enclosed initializer lists in a variadic template?

c++, c++11, variadic-templates

Solution

A brace enclosed initializer list cannot be forwarded, so you are unfortunately out of luck.

Problem

I'm trying to use brace-enclosed initializer lists in a variadic template function, but the compiler complains... am I asking too much or did I do something wrong? This is best demonstrated by example: ``` struct Bracy { Bracy(int i, int j) { } }; struct Test { void consumeOne(int i) { } void consumeOne(const Bracy & bracy) { } void consume() { } template<typename T, typename ...Values> void consume(const T & first, Values... rest) { consumeOne(first); consume(rest...); } template<typename ...Values> Test(Values... values) { consume(values...); } }; void testVariadics() { Test(7,{1,2}); //I'd like {1,2} to be passed to consumeOne(const Bracy & bracy) } ``` GCC (4.7) says: ``` main.cpp:45:14: error: no matching function for call to ‘Test::Test(int, <brace-enclosed initializer list>)’ ```

Original source

Related problems