This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/55015] New: Lambda functions not found at link time when declared in an inline function
- From: "julien.nitard at m4tp dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 22 Oct 2012 02:09:54 +0000
- Subject: [Bug c++/55015] New: Lambda functions not found at link time when declared in an inline function
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55015
Bug #: 55015
Summary: Lambda functions not found at link time when declared
in an inline function
Classification: Unclassified
Product: gcc
Version: 4.7.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: julien.nitard@m4tp.org
Hi all,
Following this stackoverflow question
http://stackoverflow.com/questions/13003941/lambda-not-found-when-defined-in-an-inline-function-in-g-4-7,
I was directed here to report a bug.
I have tried to find similar bugs but haven't.
Lambdas are not handled properly when declared inside inline functions (or so
it seems).
Here is a LWS link that demonstrates the error:
http://liveworkspace.org/code/35374b3c9b0d40e8ccc0819eb44d7f9e
In case the link disappears, here the source:
#include <stdexcept>
#include <string>
#include <boost/algorithm/string.hpp>
using std::string;
typedef bool (*FieldComparer)(const std::string&, const std::string&);
inline FieldComparer
GetComparer(const std::string& query, string& separator)
{
if (query.find('=') != std::string::npos) {
separator = "=";
return [](const string& s1, const string& s2) { return s1 == s2; };
}
else if (query.find('^') != string::npos) {
separator = "^";
return [](const string& s1, const string& s2) { return
boost::starts_with(s1, s2); };
}
else if (query.find('*') != string::npos) {
separator = "*";
return [](const string& s1, const string& s2) { return
boost::contains(s1, s2); };
}
else if (query.find('!') != string::npos) {
separator = "!";
return [](const string& s1, const string& s2) { return s1 != s2; };
}
else
throw std::invalid_argument("Search: could not find operator in query
string.");
}
int main()
{
std::string sep;
auto comp = GetComparer( "=", sep );
}
Many thanks,