У меня есть функция макроса, которая работает так, как вы ожидаете:
#define PRECONDITION(testBool) ( !(testBool) ? \
( fprintf(stderr, "%s:%i: Precondition '%s' failed.\n", \
__FILE__, __LINE__, #testBool), \
exit(1) ) : void(sizeof(0)) )
Это замечательно, поскольку я могу создавать хорошие утверждения:
PRECONDITION(5 > 6); // prints "<file>:<line>: Precondition '5 > 6' failed."
Пока это работает, я ' Я пытаюсь изучить лучший и более современный способ сделать это, используя constexpr
, чтобы я мог иметь безопасность типов, используйте std::err <<
. Тем не менее, я не смог найти источник с указанием, как это сделать / действительно ли это возможно, поэтому я спрашиваю здесь. То, что я представляю, является чем-то вроде:
constexpr void PRECONDITION(bool testBool)
{
if(testBool) { return; }
std::cerr << __SOME_MAGIC__ << ":" << __SOME_MAGIC__ << ":"
<< "Precondition '" << __SOME_MAGIC__ << "' failed." << std::endl;
}
Возможно ли добиться такого поведения?