4

Boost ICL を使い始めて、非常に基本的なものに出くわしました。たとえば、関数containsは、指定された要素が間隔内にあるかどうかに応じて、true または false を返す必要があります。ただし、これは機能しますが、機能し[right,left]_open_intervalsません[open,closed]_inteval(以下の例を参照)。

これは見落としというにはあまりにも明白なようです。意図した方法でライブラリを使用していますか?

例 (gcc 4.8 または clang 3.3 と Boost 1.54 を使用):

#include <boost/concept_check.hpp> //needed to make this MWE work, boost icl should include it internally

#include<boost/icl/right_open_interval.hpp>
#include<boost/icl/closed_interval.hpp>
#include<boost/icl/open_interval.hpp>
int main(){
    boost::icl::right_open_interval<double> roi(6.,7.);
    assert(boost::icl::contains(roi, 6.) == true);  //ok
    assert(boost::icl::contains(roi, 6.) == false); //ok

    boost::icl::closed_interval<double> oi(4.,5.); // or open_interval
    assert(boost::icl::contains( oi, 4.) == false); //error: "candidate template ignored"
    assert(boost::icl::contains( oi, 5.) == false); //error: "candidate template ignored"
}

注: 上記は「静的」間隔と呼ばれます (バインドされたプロパティが型の一部であるため)。動的間隔は期待どおりに機能します。

4

1 に答える 1