簡體   English   中英

為什么沒有從 std::tuple 的(隱式)轉換<ts...> & 到 std::tuple<ts&...> ?</ts&...></ts...>

[英]Why is there no (implicit) conversion from std::tuple<Ts...>& to std::tuple<Ts&...>?

  1. 如標題所述,是否有特定原因導致沒有從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;
}
  1. 如果我重新實現 STL tuple實現,我必須更改/添加什么?

以下是 Godbolt 展示問題的鏈接: https://godbolt.org/z/zqfrETKEz

PS:我在 godbolt 中使用了c++17標志,因為 EASTL 不使用c++20標志編譯,但我也對c++20解決方案感興趣。

作為zip論文 ( P2321 ) 的結果,將出現在中。


一般來說,重載集通常有一個重載采用T const&和另一個重載采用T&& ,通常不需要T&作為不同的第三個選項(而T const&&甚至更少)。 這是最初只有兩個的案例之一,但實際上確實至少需要第三個。

我不確定您是否有特殊動機需要tuple<int>&轉換為tuple<int&> ,但是zip需要它才能工作,這就是它發生變化的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM