Being a User Defined Type, unsigned_int<> is unable to fully emulate the implicit conversion sequences that apply to builtin unsigned.
#include "imp/unsigned_int.hpp"
using imp::unsigned_int;
void by_const_ref( unsigned_int< 256 > const & ) {}
void by_value( unsigned_int< 256 > ) {}
int main()
{
unsigned_int< 128 > a;
by_const_ref( a );
by_value( a );
}