Вызванные здесь operator<
и operator<=
являются шаблонами; следовательно, значение, предоставляемое указанным операторам для аргумента Index
, должно быть точно такого же типа, что и параметр шаблона Index
передаваемого диапазона.
Тип boost::multi_array_types::index_range::index
в конечном итоге сводится к typedef для std::ptrdiff_t
; учитывая, что вы предоставляете int
литералов, явно для вашей платформы / конфигурации, std::ptrdiff_t
является typedef для некоторого типа, отличного от int
(согласно вашим сообщениям об ошибках это long
).
Переносимое исправление заключается в приведении ваших литералов к нужному типу:
#include <boost/multi_array.hpp>
int main()
{
typedef boost::multi_array_types::index_range range;
typedef range::index index;
range a_range;
a_range = index(3) <= range();
a_range = index(2) < range();
index i(1);
a_range = i <= range();
}