Можно ли написать макрос ASSERT_NEVER? - PullRequest
0 голосов
/ 24 июня 2018

Я хотел бы написать макрос C ++ ASSERT_NEVER, который бы выдал предупреждение во время компиляции , когда поток управления может достичь этой точки.Примерно так:

class Base { protected: explicit Base(); };
class A: public Base {};
class B: public Base {};
// class C: public Base {};

void doSomething (Base *pObj)
{
    if (dynamic_cast<A*>(pObj) != NULL) doA();
    else if (dynamic_cast<B*>(pObj) != NULL) doB();
    else ASSERT_NEVER("You forgot one case, dude!");
}

Итак, приведенный выше код будет компилироваться без предупреждения.Как только вы введете class C, компилятор остановится и выдаст предупреждение.

Возможно ли написать такой макрос?

Идея возникла, потому что в TypeScript есть такая концепция,См. assert-never .

...