On Friday, 1 August 2014 at 06:53:17 UTC, Kagamin wrote:
On Thursday, 31 July 2014 at 19:31:51 UTC, Jonathan M Davis
wrote:
The whole type is templated, so the assertions will be
compiled in based on whether the user's code is compiled with
-released or not.
Sounds tricky. Doesn't the compiler optimize template
instantiation? If it finds an already compiled template
instance somewhere, it will use it instead of generating new
one.
Since all template instantiations must happen when you compile
your program rather than in any libraries you're linking against,
why would it matter? If you compile your program without
-release, then all assertions in all templates that your program
uses will be enabled. The only cases where it wouldn't be would
be when a library that you're linking against uses that template
internally, but then it's that library's code and not yours, so
it's probably out of your hands to deal with assertion failures
in it anyway. Any template reuse that occurred would be reuse
within your program and thus use the same flags. The only way
that I can think of that that could be screwed up is if you're
compiling each module separately and use different flags for
each, but then each module which was compiled with -release
wouldn't have assertions and those that weren't would. The
compiler would never try to share any template instantiations
across them. They wouldn't even be involved with each other until
the linker was run on them, so the compiler wouldn't even have
the chance to try and share anything between them.
- Jonathan M Davis