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

时间:2013-09-10 19:57:43

标签: c++ c++11 tuples constexpr c++14

这是我以前的问题"Which parts of the C++14 Standard Library could be and which parts will be made constexpr?""Guidelines to do constexpr operator-overloading?"

的后续问题

在运行时世界中,几个数据成员的nice idiom to overload operator< for a struct是使用std::tie将结构转换为std::tuple并在其operator<上捎带Right Thing™(各种成员的字典比较)。

在C ++ 14中,std::tuple的许多部分都是constexpr,特别是make_tuplestd::get和前面提到的operator<。但是,看似相关的std::tie似乎未标记constexpr。这是相当烦人的,因为它使得定义用户定义的文字类型可以在编译时进行比较,而不是必要的。

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

更新LWG issue 2301implemented in libc++libstdc++ bug 65978

UPDATE2 :在修改libstdc ++错误报告后3小时内由@JonathanWakely修复!

1 个答案:

答案 0 :(得分:5)

在使用constexpr ness的任何情况下,make_tuple的行为应与tie完全相同,但理论上tie会添加额外级别的不需要的间接费用参考文献。因此,tie不需要constexpr,因为make_tuple可以达到此目的。