12-03-2024, 12:17 PM

We would like to have some clarification regarding cvalues and integral constant expressions when considering C++14.

Main Question: Is N, which is an integral constant expression, a cvalue as defined in MISRA C++:2008?

Question 2: Does the use of {} or () have any affect on whether N is a cvalue?

Question 3: Does it matter whether T is fundamental type or a class type? For example:

Main Question: Is N, which is an integral constant expression, a cvalue as defined in MISRA C++:2008?

Code:

`template <typename T, int N>`

constexpr auto fun()

{

constexpr auto v = T{N};

return /* something */;

}

Question 2: Does the use of {} or () have any affect on whether N is a cvalue?

Question 3: Does it matter whether T is fundamental type or a class type? For example:

Code:

`template <typename T>`

struct CustomScalar final

{

T val{};

constexpr CustomScalar() = default;

explicit constexpr CustomScalar(T x) : val{x} {}

};

int main()

{

fun<CustomScalar<float>, 2>();

}