标准大师的问题。
试图回答另一个问题时,我开始怀疑代码的格式是否正确。
据我所知,以下代码格式错误
int main ()
{
std::tuple<> a;
std::get<0>(a);
}
因为对std::get<I>(t)
, whent
是 a的调用std::tuple<Ts...>
是不正确的 when I
is 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)
为零),是格式正确还是格式错误?