标准大师的问题。
试图回答另一个问题时,我开始怀疑代码的格式是否正确。
据我所知,以下代码格式错误
int main ()
{
std::tuple<> a;
std::get<0>(a);
}
因为对std::get<I>(t), whent是 a的调用std::tuple<Ts...>是不正确的 when Iis outside the range [0, sizeof...(Ts)[。
在这种情况下sizeof...(Ts)为零,因此范围[0, 0[为空,因此std::get<I>(a)对于每个 index 都是格式错误的I。
但是什么时候std::get<I>(a)通过一个空的可变参数包展开呢?
我的意思是:以下代码
#include <tuple>
template <typename ... Args>
void bar (Args const & ...)
{ }
template <std::size_t ... I>
void foo ()
{
std::tuple<> a;
bar( std::get<I>(a) ... );
}
int main ()
{
foo<>();
}
使用格式错误的 (?) 调用 ( std::get<I>(a)) 但零时间可变参数扩展 (sizeof...(I)为零),是格式正确还是格式错误?