[ICL] intersects(interval_set< int >, int) doesn't compile
AFAICT from the docs the following should compile: #include <boost/icl/interval_set.hpp> namespace icl = ::boost::icl; void interval_set_intersects() { icl::intersects( icl::interval_set< int >(), 1 ); } but I get a no match error: gcc.compile.c++ bin/gcc-4.4.3/debug/src/sandbox.o src/sandbox.cpp: In function ‘void interval_set_intersects()’: src/sandbox.cpp:7: error: No match for ‘intersects(boost::icl::interval_set<int, less, boost::icl::discrete_interval<int, less>, allocator> &, int)’ I'm using ICL in boost SVN revision 68965 John.
John Reid wrote:
AFAICT from the docs the following should compile:
#include <boost/icl/interval_set.hpp>
namespace icl = ::boost::icl;
void interval_set_intersects() { icl::intersects( icl::interval_set< int >(), 1 ); }
but I get a no match error:
gcc.compile.c++ bin/gcc-4.4.3/debug/src/sandbox.o src/sandbox.cpp: In function ‘void interval_set_intersects()’: src/sandbox.cpp:7: error: No match for ‘intersects(boost::icl::interval_set<int, less, boost::icl::discrete_interval<int, less>, allocator> &, int)’
Just a shot, but have you noticed the first argument is by reference, and you are passing a temporary? Does the following work: { icl::interval_set<int> iclset; icl::intersects( iclset, 1 ); } Jeff
On 18/02/11 12:38, Jeff Flinn wrote:
John Reid wrote:
AFAICT from the docs the following should compile:
#include <boost/icl/interval_set.hpp>
namespace icl = ::boost::icl;
void interval_set_intersects() { icl::intersects( icl::interval_set< int >(), 1 ); }
but I get a no match error:
gcc.compile.c++ bin/gcc-4.4.3/debug/src/sandbox.o src/sandbox.cpp: In function ‘void interval_set_intersects()’: src/sandbox.cpp:7: error: No match for ‘intersects(boost::icl::interval_set<int, less, boost::icl::discrete_interval<int, less>, allocator> &, int)’
Just a shot, but have you noticed the first argument is by reference, and you are passing a temporary? Does the following work:
{ icl::interval_set<int> iclset;
icl::intersects( iclset, 1 ); } Good point but it doesn't change things.
2011/2/18 John Reid <j.reid@mail.cryst.bbk.ac.uk>:
On 18/02/11 12:38, Jeff Flinn wrote:
John Reid wrote:
AFAICT from the docs the following should compile:
#include <boost/icl/interval_set.hpp>
namespace icl = ::boost::icl;
void interval_set_intersects() { icl::intersects( icl::interval_set< int >(), 1 ); }
but I get a no match error:
gcc.compile.c++ bin/gcc-4.4.3/debug/src/sandbox.o src/sandbox.cpp: In function ‘void interval_set_intersects()’: src/sandbox.cpp:7: error: No match for ‘intersects(boost::icl::interval_set<int, less, boost::icl::discrete_interval<int, less>, allocator> &, int)’
Just a shot, but have you noticed the first argument is by reference, and you are passing a temporary? Does the following work:
{ icl::interval_set<int> iclset;
icl::intersects( iclset, 1 ); }
Good point but it doesn't change things.
Grrr, this is an error. bool intersects(..) and bool disjoint(..) do not compile as intended and documented for element_types and segment_types. Thank you for spotting this. I'm going to fix that. If you don't bother to burn up some time you can write a ticket but I will fix this anyway. Unfortunately it's tool late for 1.46 :( As a workaround we can fall back to using only containers as arguments for functions intersects and disjoint: icl::interval_set<int> iclset; iclset += interval<int>::right_open(1,5); icl::interval_set<int> one; one += 1; BOOST_CHECK(icl::intersects( iclset, one )); BOOST_CHECK(!icl::disjoint( iclset, one )); Regards, Joachim -- Interval Container Library [Boost.Icl] http://www.joachim-faulhaber.de
participants (3)
-
Jeff Flinn
-
Joachim Faulhaber
-
John Reid