Наличие этой ошибки при использовании c ++ 17 на ОС Ma c. Насколько я могу судить, код верен и должен работать нормально (компилируется без проблем с w / g ++ и clang ++ на linux). Кроме того, насколько я могу судить, текущая версия clang [10.0.1] ma c по умолчанию должна поддерживать c ++ 17 (полная распечатка информации о версии ниже).
Итак, мой вопрос: действительно ли это ошибка в моем коде, но она работает по счастливой случайности на linux? Или это проблема с MacOS Clang, например, не полная реализация C ++ 17?
Из cppref: Определено в заголовке (начиная с C ++ 17): int abs( int n );
Другие функции C ++ 17, похоже, работают совершенно нормально.
#include <cmath>
// #include <cstdlib> //works if included
int main() {
int i = 1;
// return std::abs(1); // Works fine
return std::abs(i); // Fails
}
Скомпилируйте с: clang++ -std=c++17 test.cpp
Получите эту ошибку:
test.cpp:7:10: error: call to 'abs' is ambiguous
return std::abs(i);
^~~~~~~~
/Library/Developer/CommandLineTools/usr/include/c++/v1/math.h:761:1: note:
candidate function
abs(float __lcpp_x) _NOEXCEPT {return ::fabsf(__lcpp_x);}
^
(... etc.)
1 error generated.
Если вы #include <cstdlib>
, она работает без ошибок. использование -std=gnu++17
или -std=c++1z
также не устраняет проблему. В реальном коде (который, очевидно, является более сложным, чем описанный выше, и фактически использует функции c ++ 17), ошибка происходит в зависимости от порядка моих включаемых файлов. Я не могу повторить это в простом примере, но я предполагаю, что все сводится к вызову версии cstdlib
вместо версии cmath
.
В настоящее время мой «обходной путь» - просто поставить заголовок входит в порядок, который работает .. но это вряд ли долгосрочное решение.
Кто-нибудь знает причину?
Информация о версии (ошибка не указана c в этой версии MacOS, также происходит на ноутбуках моих студентов):
Bens-iMac:test ben$ clang++ -v
Apple LLVM version 10.0.1 (clang-1001.0.46.4)
Target: x86_64-apple-darwin18.5.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin