gpt4 book ai didi

c++ - 处理 constexpr 函数中的 fatal error (或断言)

转载 作者:行者123 更新时间:2023-11-28 04:23:53 25 4
gpt4 key购买 nike

如果参数类型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) 静态断言

1) 我应该抛出什么类型的异常?

2) 它是实现定义的,不保证是一个 costexpr。

3) static_assert(false) 总是独立于 T 失败。

最佳答案

static_assert(false) always fails independently of T.

然后让它依赖于T

template<typename>
struct always_false { enum {value = 0}; };

// ...

if constexpr(...) {
}
else {
static_assert(always_false<T>::value, "Some useful description");
}

是的,这是魔术师的把戏。但干巴巴的法律条文是可以接受的。遗憾的是,没有真正更好的方法来在 if constexpr 的依赖分支中打印有用的诊断信息。

关于c++ - 处理 constexpr 函数中的 fatal error (或断言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54866563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com