Opened 11 years ago

Closed 10 years ago

#6357 closed Bugs (fixed)

Resolve ambiguity for unqualified call to begin/end

Reported by: Thomas Heller Owned by: Thomas Heller
Milestone: To Be Determined Component: phoenix
Version: Boost 1.48.0 Severity: Problem
Keywords: Cc:

Description

On 12/16/2011 10:44 AM, Nathan Ridge wrote:

Hello,

I am running into a problem where an unqualified call to begin() on a range type whose template parameters include a Boost.Phoenix type (for examle filtered_range<Pred, R> where Pred is a phoenix function) is ambiguous because, in addition to the intended std::begin, phoenix::begin is being found by ADL.

What can be done about this? There exists precedent for placing boost::xxx::begin/end functions in ADL barrier namespaces because C++11 encourages unqualified calls to begin/end (specifically, this was done for boost::range::begin/end). Should the same thing be done for Phoenix?

Here is a minimal example that reproduces the problem:

#include<iterator>

#include<boost/range/adaptor/filtered.hpp>
#include<boost/phoenix/phoenix.hpp>

using std::begin;

{{{
int main()
{
     using boost::phoenix::arg_names::arg1;
     using boost::adaptors::filtered;
    
     int v[5];
     const auto&  f = v | filtered(arg1<  0);
     begin(f);
}
}}}

Change History (2)

comment:1 by Fernando Pelliccioni <fpelliccioni@…>, 11 years ago

Fix in Ticket #6360

comment:2 by Nathan Ridge, 10 years ago

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.