Conditional Compilation with if constexpr (C++17)

(From Marius Bancila's Blog)

This is a feature of the preprocessor that selects whether to include or not a chunk of code in the final text file that will be passed to the compiler. Preprocessor conditional directives can check arithmetic expressions or whether a name is defined as a macro.

In the following example, a message is written to the standard output stream when the program is compiled using a debug configuration and the _DEBUG macro is defined.

#define TRACE(x) std::cout << x << std::endl

int main()
{
#ifdef _DEBUG
   TRACE("debug build");
#endif
}

In C++17 this can be replaced with constexpr if as shown in the following example:

#include <string_view>

inline void trace(std::string_view text)
{
   std::cout << text << std::endl;
}

int main()
{
   if constexpr(_DEBUG)
      trace("debug build");
}