C ++:使用std :: ignore返回std :: tie的类型

时间:2014-04-10 16:44:09

标签: c++ c++11 stl tuples undefined-behavior

我想知道当一些参数是std::tuple时,C ++ 11标准是否对std::tie返回的std::ignore类型有任何要求。

更具体地说,我可以假设:

  1. decltype(std::tie(42, std::ignore))decltype(std::tie(std::ignore, 42))
  2. 不同
  3. decltype(std::tie(42, std::ignore))decltype(std::tie(42))
  4. 不同
  5. decltype(std::tie(std::ignore, 42))decltype(std::tie(42))
  6. 不同
  7. decltype(std::tie(std::ignore, std::ignore))decltype(std::tie(std::ignore))
  8. 不同

    换句话说,从类型的角度来看,生成的元组是否表现为一个元组,对于按位置匹配decltype(std::ignore)的所有模板参数,类型为std::ignore

1 个答案:

答案 0 :(得分:4)

是的,std::tie可以std::tuple<T&...>返回T...,其中std::ignore是给定的类型。
tuple具有未指定的类型,但根据您在std::tie中指定的位置,它仍会显示在 int n; auto i = std::tie(std::ignore, n); auto j = std::tie(n, std::ignore); auto k = std::tie(n); static_assert(!std::is_same<decltype(i), decltype(j)>::value, ""); static_assert(!std::is_same<decltype(i), decltype(k)>::value, ""); static_assert(!std::is_same<decltype(j), decltype(k)>::value, ""); 中。

如果if让你感觉更好,你可以在代码中包含:

{{1}}
对于您明确使用的任何组合,

等等。这样,如果您的假设无效,编译将失败。