正如标题所述,为什么没有从
std::tuple<Ts...>&
到std::tuple<Ts&...>
的(隐式)转换,这是有特定原因的吗?
相比之下,EASTL的tuple
实现提供了此转换。#include <EASTL/tuple.h>
#include <tuple>
#include <type_traits>
int main()
{
using TupleRef = std::tuple<int, float>&;
using RefTuple = std::tuple<int&, float&>;
using EATupleRef = eastl::tuple<int, float>&;
using EARefTuple = eastl::tuple<int&, float&>;
// static_assert(std::is_convertible_v<TupleRef, RefTuple>); // fails to compile
static_assert(std::is_convertible_v<EATupleRef, EARefTuple>);
return 0;
}
- 如果我重新实现STL中的
tuple
,我需要改变/添加哪些内容?
这里是一个展示问题的godbolt链接:https://godbolt.org/z/zqfrETKEz
PS:我在godbolt中使用了c++17
标志,因为EASTL无法使用c++20
标志进行编译,但我也对c++20
解决方案感兴趣。