What is the difference between assert and static_assert?
Solution 1:
You ask three questions, so I will try to answer each of them.
- Can someone give me an example of where only
static_assert
will work, or onlyassert
?
static_assert
is good for testing logic in your code at compilation time. assert
is good for checking a case during run-time that you expect should always have one result, but perhaps could somehow produce an unexpected result under unanticipated circumstances. For example, you should only use assert
for determining if a pointer passed into a method is null
when it seems like that should never occur. static_assert
would not catch that.
- Do they do anything a simple
if
statement can't do?
assert
can be used to break program execution, so you could use an if
, an appropriate error message, and then halt program execution to get a similar effect, but assert
is a bit simpler for that case. static_assert
is of course only valid for compilation problem detection while an if
must be programmatically valid and can't evaluate the same expectations at compile-time. (An if
can be used to spit out an error message at run-time, however.)
- Is it bad practice to use them?
Not at all!
Solution 2:
static_assert
is meant to make compilation fail with the specified message, while traditional assert
is meant to end the execution of your program.