vsuser
vsuser

Reputation: 13

constexpr in class without static

I have a situation where I need to store a compile time constant in a header, and I do it in the class I'm using it in as I don't want to expose the constant to other files that include this header. (as well as the fact that it depends on another hidden struct)

Like this:

namespace ns {
    class bla {
    private:
        struct internalStruct {
            // ...
        };

        // I put it in the class as I don't want other files to be able to see this
        constexpr const size_t compileConstant = sizeof(internalStruct) * 8;
    };
}

The problem is I get a

Constexpr is not valid here

error. The solution is to add static, however I read that constexpr integral members should be inline.

What should I do?

Upvotes: 1

Views: 352

Answers (1)

Zoso
Zoso

Reputation: 3465

Adding static should be perfectly fine for your use case. That's what the reference states too:

A constexpr specifier used in a function or static data member (since C++17) declaration implies inline.

And since this is a compile-time constant, you might as well have it shared across all class instances rather than on a per-instance basis (which is usually how even const variables are used).

Upvotes: 1

Related Questions