Use static_assert to get a slightly better error message.

This branch prints out a more helpful error message when your compiler supports `static_assert`.  When it doesn't, you get the old error message about calling a private constructor.  @roystgnr