5 ms·
The preprocessor: Bjarne Stroustrup has been willing to get rid of it for a long time. C++20 modules are a step in this direction. However - as pointed out by J
by Ace17 8y ago
The preprocessor: Bjarne Stroustrup has been willing to get rid of it for a long time. C++20 modules are a step in this direction. However - as pointed out by John Lakos - you still need macros to build zero-cost logging facilities.
- Ace17 8y agoCorresponding citation from John Lakos about why macros could be necessary: https://www.youtube.com/watch?v=K_fTl_hIEGY&t=3140 https://www.youtube.com/watch?v=K_fTl_hIEGY&t=3140
- frabert 8y agoI don't think that's necessarily true, using constexpr facilities you could make a function do nothing according to a compile-time variable value
- Ace17 8y agoI agree ; however, the tricky part - I believe - is not computing the message string in case you're not going to print/record it.
- xamolxix 8y agoIs IO allowed in constexpr functions?
- justbuchanan 8y agoI don't think so, but for zero-cost logging you just need the conditional for your branch to be constexpr. If the branch is known not to be taken at compile time, the compiler can just throw it away. Something like: void MyDebugLog(text) { if (<constepxr check if logging enabled>) { // actually log... } }