If endl is a function call and/or macro that magically knows the right line ending for whatever ultimately stores or reads the output stream, then, ugly though it is, endl is the right thing to use.
If a language or compiler automatically "do(es) the right thing" with \n as well, then check your local style guide. Is this your code? Do what you will. Is this for your company? Better to check what's acceptable.
If you want to guarantee a Unix line ending use \012 instead. Or \cJ if your language is sufficiently warped.