Given the support of previous answers I finally finalized the code as follows:
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstdint>
#include <type_traits> // for std::conditional
using namespace std;
template <size_t N> using Float_4=conditional< 80<N && N<=128, _Float128,bool>::type;
template <size_t N> using Float_3=conditional< 64<N && N<= 80,__float80 ,Float_4<N>>::type;
template <size_t N> using Float_2=conditional< 32<N && N<= 64, _Float64 ,Float_3<N>>::type;
template <size_t N> using Float_1=conditional< 16<N && N<= 32, _Float32 ,Float_2<N>>::type;
template <size_t N> using Float_0=conditional< 0<N && N<= 16, _Float16 ,Float_1<N>>::type;
typedef Float_0<81> Float;
int main(int argc, char **argv)
{
Float x=12.3456789012345678901234567890123456789e-3L;
std::cout<<"Hello x="<<setw(50)<<setprecision(40)<<x<<std::endl;
return 0;
}
Unfortunately the code above while should work for N=15 and N=89 etc, it does not work for all cases because << is still "under development" for types as _Float16 or _Float128 :-) .