constexpr constructor with compile time validation

只愿长相守 提交于 2019-12-19 10:08:04

问题


I'd like to build up a class with the option of constexpr-ness. And, of course, I'd like to take advantage of compile time error check.

Every constexpr function, constructor included, must work also at runtime, when the given parameters are not constant expression. That's should be the reason why every time you use static_assert in a constexpr function upon a function parameter it fails to compile.

Said so, I've read that one can use the exception throwing mechnanism, since when the function is called upon a constant expression, those exceptions can be evaluated at compile time. If that works, for functions the problem is solved.

But the problem is still not solved for constructors, since constexpr constructors seem to must have no body... so it looks like I can't use exception throwing from there!

Any idea?


回答1:


Following may help:

class A
{
public:
    constexpr A(int i) : i(i != 42 ? throw 42 : i) {}
private:
    int i;
};

int main(int argc, char *argv[])
{
    constexpr A a1(42);
    //constexpr A a2(41); // Compile error as expected.
    return 0;
}


来源:https://stackoverflow.com/questions/21557755/constexpr-constructor-with-compile-time-validation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!