25

这是我之前的问题“C++14 标准库的哪些部分可能是,哪些部分将被制作constexpr?”的后续问题。和constexpr操作员重载的指南?”

在运行时世界中,为多个数据成员的结构重载的一个很好的习惯用法operator<std::tie是将结构转换为 astd::tuple并搭载在其operator<上执行 Right Thing™(各种成员的字典比较)。

在 C++14 中,很多部分std::tuple都是制作constexpr的,尤其make_tuplestd::get前面提到的operator<. 不过,貌似相关的好像std::tie没有标注constexpr。这很烦人,因为它使得定义可以在编译时进行比较的用户定义的文字类型比必要的更加冗长。

std::tie问题:是否有任何未标记constexpr为 C++14 的技术原因?

更新LWG 问题 2301在 libc++libstdc++ 中实现 bug 65978

更新 2 :在提交 libstdc++ 错误报告 3 小时后由@JonathanWakely 修复

4

1 回答 1

5

在任何使用constexprness的情况下,除了理论上会从引用中添加额外级别的不需要的间接之外,它make_tuple的行为应该完全相同。因此没有必要这样做,因为它可以达到这个目的。tietietieconstexprmake_tuple

于 2013-09-10T20:23:50.550 回答