Ошибка компилятора 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 выдает ошибку компилятора для этого выражения? Есть ли способ переформулировать выражение, чтобы избежать этой ошибки?