我想知道当一些参数是std::tuple
时,C ++ 11标准是否对std::tie
返回的std::ignore
的类型有任何要求。
更具体地说,我可以假设:
decltype(std::tie(42, std::ignore))
与decltype(std::tie(std::ignore, 42))
decltype(std::tie(42, std::ignore))
与decltype(std::tie(42))
decltype(std::tie(std::ignore, 42))
与decltype(std::tie(42))
decltype(std::tie(std::ignore, std::ignore))
与decltype(std::tie(std::ignore))
换句话说,从类型的角度来看,生成的元组是否表现为一个元组,对于按位置匹配decltype(std::ignore)
的所有模板参数,类型为std::ignore
?
答案 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}}对于您明确使用的任何组合,
等等。这样,如果您的假设无效,编译将失败。