Я работаю над кодом cpp для переноса одного приложения с Windows на Mac. При создании приложения в XCode оно выдает ошибку, говорящую:
"Use of undeclared identifier 'nothrow'; did you mean 'throw'? memory"
Эти ошибки выбрасываются в заголовки стандартной библиотеки cpp.
Ниже приведено описание стека ошибок:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/c++/4.2.1/memory:83:8: Use of undeclared identifier 'nothrow'; did you mean 'throw'?
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/c++/4.2.1/string:48:10: In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/c++/4.2.1/string:48:
Я искал в интернете, но не смог найти решение этой проблемы. Любые предложения будут полезны. Почему выкидывается ошибка из системных заголовочных файлов?
Сведения о системе:
SDK — это OSX 10.10.
Опция компилятора, используемая для компиляции приложения — C ++ Standard Library:
libc ++ (LLVM C ++ Standard с поддержкой C ++ 11. Диалект языка C ++: GNU ++ 11. Компилятор для C ++: Apple LLVM 6.0
Спецификация throw () для функций устарела в стандарте ’11 и удалена в стандарте ’17. Если clang не поддерживает его, я предполагаю, что это был преднамеренный выбор со стороны разработчиков, или вы компилируете в режиме c ++ 17.
правильный в современном c ++ нужно использовать спецификацию noexcept. noexcept
позволяет более эффективно генерировать код в том смысле, что он не должен выполнять RTTI для сгенерированных исключений, вместо этого, если исключение выдается из фрейма вызова под объявленной функцией noexcept, вызывается std :: terminate, закорачивая сумасшедший Механизм std :: непредвиденный (), определенный стандартом ’98.
Других решений пока нет …