KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
#include <initializer_list> #include <utility> void foo(std::initializer_list<std::pair<int,int>>) {} template <class T> void bar(T) {} int main() { foo({{0,1}}); //This works foo({{0,1},{1,2}}); //This works bar({{0,1}}); //This warns bar({{0,1},{1,2}}); //This fails bar(std::initializer_list<std::pair<int,int>>({{0,1},{1,2}})); //This works } This doesn't compile in gcc 4.5.3, it gives a warning for the marked line saying deducing ‘T’ as ‘std::initializer_list<std::initializer_list<int> >’ and an error for the marked line saying no matching function for call to ‘bar(<brace-enclosed initializer list>)’ . Why can gcc deduce the type of the first call to bar but not the second, and is there a way to fix this other than long and ugly casting?
Tags (comma-separated)
Save Edits
Cancel