Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编译std::tuple时遇到问题_C++_Templates_Clang_Stdtuple - Fatal编程技术网

C++ 编译std::tuple时遇到问题

C++ 编译std::tuple时遇到问题,c++,templates,clang,stdtuple,C++,Templates,Clang,Stdtuple,我无法用叮当声编译模板。。谢谢你的帮助 尽管该库的作者声称他在linux上使用gcc编译了以下代码,但当我尝试使用clang编译时,它抱怨编译以下模板: //这会产生“预期表达式”的错误 template static ostream&operator为了检索tuple元素,应使用非成员函数: out << ::std::get<0>(t) << " " << ::std::get<1>(t) << " " <<

我无法用叮当声编译模板。。谢谢你的帮助

尽管该库的作者声称他在linux上使用gcc编译了以下代码,但当我尝试使用clang编译时,它抱怨编译以下模板:

//这会产生“预期表达式”的错误


template static ostream&operator为了检索
tuple
元素,应使用非成员函数:

out << ::std::get<0>(t) << " " << ::std::get<1>(t) << " " << ::std::get<2>(t);

出于某种原因,out是一个自由函数,而不是成员函数。所以应该是
::std::get(p.second)
等等。@VTT原因是在依赖上下文中调用成员版本的正确语法是
t.template get()
,这很烦人。@SebastianRedl尽管这不是不提供成员版本的原因。他们可以很好地实现成员和非成员版本,就像
swap
@VTT为什么要使用(p.second)?模板参数已经给出了第二个元素。我错了吗?但是你的建议也可以编译。@eral我假设
p.second
本身就是元组,索引
也是零基的,所以它给出了第三个元素。
no member named 'get' in 'std::__1::tuple<std::__1::basic_string<char>, std::__1::basic_string<char>, int, int>'
void save_by_conns(vector<real_t> &container, const string &nam)
{
    LOOP(const WC_CONN_PAIR &p, connections)
    {
        VDI begin = container.begin() + p.second.get<2>();
        VDI end = container.begin() + p.second.get<3>();
        if (begin != end)
        {
            save_range(make_pair(begin, end), p.second.get<1>() + "_" + nam);
        }
    }
}
out << ::std::get<0>(t) << " " << ::std::get<1>(t) << " " << ::std::get<2>(t);