Opened 16 years ago
Last modified 14 years ago
#781 closed Bugs (fixed)
Lambda: (_1 + "y")(string("x")) Doesn't Compile — at Version 3
Reported by: | nobody | Owned by: | No-Maintainer |
---|---|---|---|
Milestone: | Component: | lambda | |
Version: | None | Severity: | Problem |
Keywords: | Cc: |
Description (last modified by )
This program: #include <iostream> #include <ostream> #include <string> #include <boost/lambda/lambda.hpp> int main() { const std::string s("Hello"); std::cout << (boost::lambda::_1 + ", world!")(s) << std::endl; } fails to compile with Boost 1.33.1 (on GCC 3.4.2 and GCC 4.1.1, at least) due to at least two bugs. One bug is in boost/lambda/detail/operators.hpp, lines 269-271. This function, declared to return a lambda_functor, returns a lambda_functor constructed from a tuple. But there is no such constructor. Instead, 'lambda_functor<' should be deleted from line 269 (and the closing '>' from line 271) so that it returns a lambda_functor_base constructed from a tuple. That constructor (which is explicit) does exist, and so does a lambda_functor constructor (which is implicit) from a lambda_functor_base. This is exactly what the macro BOOST_LAMBDA_PTR_ARITHMETIC_E2 immediately below does, and there is no reason for BOOST_LAMBDA_PTR_ARITHMETIC_E1 to be different. Unfortunately, fixing that leaves another, more complicated bug: for some reason, the return type appears to be deduced as const char * instead of std::string. See for yourself.
Change History (3)
comment:2 by , 16 years ago
Logged In: NO Steven Watanabe's updated patch allows this test case to compile and run successfully. Thanks! Please commit it for 1.34.0.
comment:3 by , 15 years ago
Component: | None → lambda |
---|---|
Description: | modified (diff) |
Owner: | changed from | to
Severity: | → Problem |
Status: | assigned → new |
Note:
See TracTickets
for help on using tickets.