问题是-为什么这样的代码在cpp中是非法的?
static_assert(std::declval>().size() == 4);这是标准上的疏忽,还是有更深层次的原因std::declval不是constexpr?
发布于 2021-02-27 00:51:01
这一行:
static_assert(std::declval>().size() == 4);编译失败,因为您正在使用declval在评估的上下文中。这是不允许的,如果你这样做了,你的程序就是错误的。declval只能在未计算的上下文中调用decltype或者sizeof。
创建一个函数constexpr意味着它既可以在运行时调用,也可以在编译时调用。因为declval根本不能被调用,做它没有意义constexpr。我想这不会有什么坏处constexpr,但无论哪种方式,这都无关紧要。
https://stackoverflow.com/questions/66388805
复制相似问题