How do I use a non-static class member in a constexpr function?

Viewed 56

I'm having trouble getting the size of this non-static member array of a class.

struct Foo
{
    Foo() { std::cout << "Non-constexpr constructor\n"; }
    int anarray[16];
};

template <typename T, int N> consteval int get_array_size(const T(&)[N]) { return N; }


int main()
{
    
    constexpr int arraySize = get_array_size(Foo().anarray);
    get_array_size(((Foo*)0)->anarray); // No constant expression
    get_array_size(std::declval<Foo>().anarray); // No constant expression
}
0 Answers
Related