constexpr constructor with compile time validation

c++, c++11, constexpr

Solution

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;
}

Problem

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?

Original source