[Bug c++/59079] New: a lambda with a parameter that depends on vector<>::value_type typedef leads to compiler error
ahu at ds9a dot nl
gcc-bugzilla@gcc.gnu.org
Mon Nov 11 20:32:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59079
Bug ID: 59079
Summary: a lambda with a parameter that depends on
vector<>::value_type typedef leads to compiler error
Product: gcc
Version: 4.8.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: ahu at ds9a dot nl
Created attachment 31194
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=31194&action=edit
small test file that fails to compile
Thanks for the c++2011 support, it makes me happy! However, the following fails
to compile in g++ 4.6.3 and 4.8.3 (at least), and I think it is valid c++2011.
#include <vector>
#include <functional>
template<typename T>
void buildvect(const T& vect,
std::function<double(typename T::value_type)> yTransform)
{}
int main()
{
std::vector<int> blah{1,2,3,4};
buildvect(blah, [](int a) { return 1.0*a;});
}
Delivers:
t.cc: In function ‘int main()’:
t.cc:12:45: error: no matching function for call to
‘buildvect(std::vector<int>&, main()::__lambda0)’
buildvect(blah, [](int a) { return 1.0*a;});
^
t.cc:12:45: note: candidate is:
t.cc:5:6: note: template<class T> void buildvect(const T&,
std::function<double(typename T::value_type)>)
void buildvect(const T& vect,
^
t.cc:5:6: note: template argument deduction/substitution failed:
t.cc:12:45: note: ‘main()::__lambda0’ is not derived from
‘std::function<double(typename T::value_type)>’
buildvect(blah, [](int a) { return 1.0*a;});
^
Does compile in clang 3.3, does compile if T::value_type is replaced by int.
Thanks!
More information about the Gcc-bugs
mailing list