为什么std :: tie没有标记为c ++ 14的constexpr?

Tem*_*Rex 23 c++ tuples constexpr c++11 c++14

这是我之前提出的问题的后续问题"C++ 14标准库的哪些部分可能是什么以及将制作哪些部分constexpr?" " constexpr运营商超载指南?"

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

在C++ 14,许多地方std::tuple制成constexpr,特别是make_tuple,std::get与前面提到的operator<.然而,似乎看似相关std::tie的没有标记constexpr.这很烦人,因为它使定义用户定义的文字类型在编译时可以比必要的更冗长.

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

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

更新2:在修改libstdc ++错误报告后,由@JonathanWakely修复了3个多小时!

Mar*_*k B 5

在它利用constexprness的任何情况下,make_tuple应该表现得完全相同,tie除了从概念上tie会从引用添加额外级别的不需要的间接.因此,没有必要tieconstexprmake_tuple会达到这一目的.

  • @MarkB,你不想两次实现类型的`operator <`,在一个(可能的)常量表达式上下文中使用它的一种方式和另一种方式(使用不同的名称)在其他地方使用,这只是令人讨厌. (3认同)