Xcode: ошибка: ожидается '(' для приведения типа функции или конструкции типа - PullRequest
1 голос
/ 22 апреля 2020

Я получил эту ошибку при попытке скомпилировать следующий код с помощью xcode. Он без проблем скомпилирован Visual Studio на Windows.

template <typename OutT, typename MayaArrayT>
void DumpMayaArray(std::vector<OutT>& out, const MayaArrayT& source)
{
    using MayaElementT = decltype(MayaArrayT()[unsigned int()]); // error happens in this line!
    static_assert(std::is_same<MayaElementT, OutT&>::value, "array type mismatch");

Что этот фрагмент кода должен сделать, это получить тип элемента MayaArrayT из возвращаемого типа ::operator[]( unsigned int index ); К сожалению, есть нет другого способа получить тип элемента MayaArrayT.

1 Ответ

3 голосов
/ 22 апреля 2020

Код в decltype на самом деле является вызовом MayaArrayT::operator(unsigned int). Однако аргументы decltype на самом деле не оцениваются, поэтому вам нужно притвориться , что вы делаете вызов, например:

using MayaElementT = decltype(
        std::declval<MayaArrayT&>()[std::declval<unsigned int>()]
      ); 
...