new is not a so-called “trait” in Rust because the convention by design is open-ended; some new constructors take arguments, others don't, some might fail, others are infallible. new is purely a conventional name; it otherwise has no significant value in Rust. They are called constructors by convention, but it is a normal static method.
The trait you seem to be looking for is Default, which is defined for types whereof it makes sense to create a new value with no further arguments, creating a sensible default value, such as the number 0, or the boolean false, or an empty collection.
Alternatively, if you seek to convert from a single argument, the trait From is what you desire:
#[no_mangle]
pub extern "C" fn make<T: Default>() -> *mut T{
Box::into_raw(Box::new(T::default()))
}
Or:
#[no_mangle]
pub extern "C" fn make_from<X, T: From<X>>(x: X) -> *mut T{
Box::into_raw(Box::new(T::from(x)))
}
The Type: Trait constraint tells the type system that the type must satisfy a given trait.
If you not be familiar with traits in Rust yet, they are an essential part of Rust programming to master.