这是我以前的问题"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_tuple
,std::get
和前面提到的operator<
。但是,看似相关的std::tie
似乎未标记constexpr
。这是相当烦人的,因为它使得定义用户定义的文字类型可以在编译时进行比较,而不是必要的。
问题:对于C ++ 14,std::tie
未标记为constexpr
是否有任何技术原因?
更新:LWG issue 2301,implemented in libc++和libstdc++ bug 65978
UPDATE2 :在修改libstdc ++错误报告后3小时内由@JonathanWakely修复!
答案 0 :(得分:5)
在使用constexpr
ness的任何情况下,make_tuple
的行为应与tie
完全相同,但理论上tie
会添加额外级别的不需要的间接费用参考文献。因此,tie
不需要constexpr
,因为make_tuple
可以达到此目的。