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