eol*_*old 5 c++ stl tuples undefined-behavior c++11
我想知道C++ 11标准是否对某些参数的返回类型有任何要求.std::tuplestd::tiestd::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的所有模板参数的类型?
是的,您可以,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, "");
Run Code Online (Sandbox Code Playgroud)
对于您明确使用的任何组合,依此类推。这样,如果您的假设无效,编译将会失败。
| 归档时间: |
|
| 查看次数: |
788 次 |
| 最近记录: |