Недавно я компилировал проект с использованием gcc в Windows WSL. Это закончилось следующей ошибкой (было еще несколько ошибок:
/usr/include/boost/math/special_functions/math_fwd.hpp:953:14: error: 'c' has not been declared
template<class T, class U>
^
/usr/include/boost/math/special_functions/math_fwd.hpp:953:16: error: 'ass' has not been declared
template<class T, class U>
^~~
/usr/include/boost/math/special_functions/math_fwd.hpp:954:33: error: 'T' was not declared in this scope
typename tools::promote_args<T, U>::type jacobi_ns(T k, U theta);
^
/usr/include/boost/math/special_functions/math_fwd.hpp:954:37: error: template argument 1 is invalid
typename tools::promote_args<T, U>::type jacobi_ns(T k, U theta);
^
/usr/include/boost/math/special_functions/math_fwd.hpp:954:55: error: no default argument for 'U'
typename tools::promote_args<T, U>::type jacobi_ns(T k, U theta);
^
После первого взгляда я совсем не понял, что компилятор пытался сказать мне, поэтому я сделал самую очевидную вещь - я просто перезапустил make. Ошибка не произошла.
Однажды я попытался проверить, что это за ошибка. Довольно скоро я пришел к следующему фрагменту без зависимостей, который выдал ту же ошибку:
namespace tools {
template<class T, class U> struct promote_args {
typedef void type;
};
}
template<c,ass T, class U>
typename tools::promote_args<T, U>::type jacobi_ns(T k, U theta);
Единственное отличие состояло в том, что на этот раз вместо 'l' the '' было в сообщениях об ошибках - так же, как и во фрагменте. Само собой разумеется - в тот момент я обращался к таблице ASCII: 'l' = 0x6c и ',' = 0x2c.
Итак - на меня повлияло легендарное переключение космических лучей? Или, может быть, мне следует заподозрить какую-то ошибку памяти в GCC или WSL?