|
Boost : |
From: Angus Leeming (angus.leeming_at_[hidden])
Date: 2005-04-06 07:20:17
John Maddock wrote:
>> So the __noreturn__ command used by GNU's /usr/include/assert.h couldn't
>> be
>> used?
>>
>> /* This prints an "Assertion failed" message and aborts. */
>> extern void __assert_fail (__const char *__assertion, __const char
>> *__file,
>> unsigned int __line, __const char *__function)
>> __THROW __attribute__ ((__noreturn__));
>
> Wouldn't that have to be applied to your function signature, rather than
> the assertion?
Well, code like this doesn't trigger a warning when compiled with g++
$ cat trial.cpp
#include <cassert>
int foo(bool a) {
if (a)
return 0;
assert(false);
}
$ g++ -W -Wall -c trial.cpp
Compare that with:
$ g++ -DNDEBUG -W -Wall -c trial.cpp
trial.cpp: In function `int foo(bool)':
trial.cpp:7: warning: control reaches end of non-void function
Clearly, the compiler is able to ascertain that execution won't proceed
past the assert. It doesn't seem so unreasonable to hope that
BOOST_STATIC_ASSERT would behave similarly.
Regards,
Angus
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk