Ошибка компилятора mingw-w64 при использовании функции шаблона с лямбда-выражением и конечным типом возврата

При кросс-компиляции программы под Ubuntu 16.04 для Windows с использованием mingw-w64 я столкнулся с этой ошибкой.

Рассмотрим этот минимальный пример программы test.cc:

template <class E = void>
void call()
{
  auto l = [](auto&& cc) -> decltype(cc[0]) {};
}

int main()
{
  call<>();
}

Компиляция с использованием g++ (версия 5.4.0)

g++ -std=c++14 test.cc -o test

работает нормально, однако Mingw (версия 5.3.1)

x86_64-w64-mingw32-g++-posix -std=c++14 test.cc -o test

выдает сообщение об ошибке

test.cc: In instantiation of 'void call() [with E = void]':
test.cc:4:40: error: subscripted value is neither array nor pointer
    auto l = [](auto&& cc) -> decltype(cc[0]) {};
                                         ^

При пропуске шаблона в приведенном выше примере функции компиляция завершается успешно.

Почему mingw выдает ошибку компилятора для этого выражения? Есть ли способ переформулировать выражение, чтобы избежать этой ошибки?

0 ответов

Другие вопросы по тегам