Opened 16 years ago
Closed 14 years ago
#781 closed Bugs (fixed)
Lambda: (_1 + "y")(string("x")) Doesn't Compile
| 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 (4)
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 |
comment:4 by , 14 years ago
| Resolution: | None → fixed |
|---|---|
| Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
