5

考虑以下代码段:

#include <iostream>

template <typename... types> void writeall(const types & ... items)
{
    (std :: cout << ... << items);
}

template <typename... types> void readall(types & ... items)
{
    (std :: cin >> ... >> items);
}

int main()
{
    writeall(1, 2, 3, 4);
    std :: cout << std :: endl;

    int a, b, c, d;
    readall(a, b, c, d);
}

writeall中,我使用折叠表达式输入std :: cout参数包。一切正常,我被1234打印到屏幕上。

readall中,我做的完全一样,期望从std :: cin参数包中读取。但是,我得到

error: expected ')'
(std :: cin >> ... >> items);

我究竟做错了什么?人们会期望事情完全一样,我只是用 operator 替换<<了 operator >>

4

1 回答 1

0

正如@TC 回答的那样,这是clang 中的一个错误。它已被修复。似乎有一个错字,在折叠表达式中产生>并且不能正常工作。>>

于 2021-06-09T20:52:45.183 回答