проблемы с компиляцией std :: tuple clang - PullRequest
0 голосов
/ 02 июня 2018

У меня проблемы с компиляцией шаблонов с помощью clang. Любая помощь приветствуется.

Хотя автор библиотеки утверждает, что он скомпилировал приведенный ниже код с помощью gcc на linux, когда я пытаюсь скомпилировать с использованием clang, он жалуется на компиляциюШаблоны ниже:

// это дает ошибку "ожидаемого выражения"

template<class T1, class T2, class T3> static ostream& operator << (
    ostream& out, const std::tuple<T1, T2, T3>& t) {
  out << t.get<0>() << " " << t.get<1>() << " " << t.get<2>();
  return out;
}

это дает ошибку:

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);
        }
    }
}

1 Ответ

0 голосов
/ 02 июня 2018

Для извлечения tuple элементов должна использоваться функция, не являющаяся членом std::get:

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