Besides custom points, custom boxes are possible as shown in this example.
#include <iostream>
#include <boost/geometry/io/dsv/write.hpp>
struct my_point
{
    double x, y;
};
struct my_int_point
{
    int x, y;
};
struct my_box
{
    my_point ll, ur;
};
struct my_box_ltrb
{
    int left, top, right, bottom;
};
struct my_box_4
{
    double coors[4];
};
template <typename P>
struct my_box_t
{
    P ll, ur;
};
int main()
{
    my_point p = boost::geometry::make<my_point>(3.5, 3.5);
    my_box b = boost::geometry::make<my_box>(0, 0, 2, 2);
    my_box_ltrb b1 = boost::geometry::make<my_box_ltrb>(0, 0, 3, 3);
    my_box_4 b4 = boost::geometry::make<my_box_4>(0, 0, 4, 4);
    my_box_t<my_point> bt = boost::geometry::make<my_box_t<my_point> >(0, 0, 5, 5);
    std::cout << boost::geometry::dsv(p) << " IN " << boost::geometry::dsv(b)
    std::cout << boost::geometry::dsv(p) << " IN " << boost::geometry::dsv(b1)
    std::cout << boost::geometry::dsv(p) << " IN " << boost::geometry::dsv(b4)
    std::cout << boost::geometry::dsv(p) << " IN " << boost::geometry::dsv(bt)
    return 0;
}