Is it idiomatic to mark a function unsafe without it actually containing any unsafe blocks?

100 points friendtoalldogs0

Basically, I want to know if it would be considered good practice to use unsafe fn to mark a function which could break library-level invariants, but doesn't actually use any language-level unsafe code to do so (so it would break in exactly the same way across compiler versions).
The thought crossed my mind while planning out a sudoku solver project I'm planning to do to learn about SIMD, and I wanted to have a type that guarantees as a type invariant that the board it represents has at least one solution. Obviously, it would be infeasible to prove this in general in the constructor, that would require solving it, the entire point of the program, so I wondered if that constructor should be marked unsafe fn even though all it's actually doing is packing some boolean arrays into u16s.