I'm wondering about the possibility of constraining types by their representation. My use case is that I have a data structure in C that is a list of pointers to objects of the same type. I want to represent that on the Rust side, and make creating APIs that return this data structure ergonomic. For that, I would like to constrain parameters to constructor functions in such a way that I can make sure that they must be repr(C), to avoid accidentally passing repr(Rust) types to C (which might accidentally work in testing, but break arbitrarily later).
One idea I had was adding an unsafe trait that someone could implement to specify that the type in question is using repr(C). The obvious extension of that would be automatically adding traits for this, possibly including alignment. Has something like that already been proposed/discussed, or is it problematic for some reason I'm not spotting?