Что мне делать в следующей функции, если тип аргумента T неверен?
template <class T>
constexpr inline size_t GetObjectSize(const T & val)
{
if constexpr (std::is_arithmetic<T>::value)
{
return sizeof(val);
}
if constexpr (std::is_class<T>)
{
return 5u;
}
//there should be compile time error.
}
int * p;
//compile time error
GetObjectSize(p);
Возможны следующие варианты: 1) создание исключения 2) assert 3) static_assert
1) Исключение какого типа я должен выбросить?
2) это определено реализацией и не гарантируется быть costexpr.
3) static_assert (false) всегда терпит неудачу независимоТ.