"вещь", такая как {1,2,3}, не может быть выражена как выражение. У него нет типа. Следовательно, вычитание типа не производится. Но C ++ 0x делает явное исключение для 'auto', поэтому
auto x = {1,2,3};
на самом деле работает и decltype (x) будет initializer_list<int>
. Но это специальное правило, которое применяется только к авто. Я думаю, они хотели сделать такие петли
for (int x : {2,3,5,7,11}) {
...
}
работает, так как этот тип цикла использует специальное правило.
Что касается решения проблемы, вы можете добавить перегрузку initializer_list<T>
в качестве «оболочки»:
template<class T>
inline void outer(initializer_list<T> il) {
inner(il);
}
Я не проверял это, но в настоящее время я понимаю, что это должно работать.