Apart from that: Did you #include <cln/float.h>? Where is that assignment (as you write it it could be outside a function body)?

As I said I tried several things. My experience is that if one includes <cln/cln.h> all
the rest  is automatically included. I have never registered any difference with explicit inclusion
on various linux and MacOS distributions.

Here is a minimal demonstration

/* File: demo.cc
   Compilation: g++ -g -O2 -o demo demo.cc -lcln
 */

//bool cln::cl_inhibit_floating_point_underflow = true;

#include <cln/cln.h>
#include <cln/float.h>

//using namespace std;
using namespace cln;

//bool cln::cl_inhibit_floating_point_underflow = true;
bool cl_inhibit_floating_point_underflow = true;

int main()
{
  float_format_t precision = float_format(50);
  cl_F x =  least_positive_float(precision);
  while(x > cl_float(0, precision) ) {
    std::cout << x << std::endl;
    x *= x;
  }
}

which produces the output:

7.241484622111747243360392473658128214691955086151413286838L-2776511644261678567
terminate called after throwing an instance of 'cln::floating_point_underflow_exception'
  what():  floating point underflow.
Abort trap