Невозможно использовать объявление "using" для std :: tuple в Apple LLVM 7.3.0 - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь использовать tuple в своей программе, и по какой-то причине я не могу упростить вызов с помощью объявления using.Например:

#include <tuple>

using std::tuple;

...

Выдает ошибку при попытке его скомпилировать:

error: no member named 'tuple' in namespace 'std'

Я могу использовать объявления using для других целей (например, std::string,std::get и т. Д.) Просто отлично.Я думаю, что я сузил это до проблемы компилятора, но у меня нет контроля над тем, какой компилятор я использую (университетский сервер), и я не могу найти что-либо в Интернете, показывающее отсутствие поддержки этого заголовка или чего-то еще.Вот информация о моем компиляторе:

$ clang++ -v

Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

Есть мысли?Вот пример его работы в другом месте: http://cpp.sh/5bofm

1 Ответ

0 голосов
/ 27 ноября 2018

Поскольку включение не дало ошибку препроцессора, вполне вероятно, что заголовок кортежа действительно существует и что это не случай неправильной / устаревшей установки стандартной библиотеки C ++.

Однако tuple, не определяемый в std, ожидается для всех стандартов C ++ до C ++ 11.

При стандартной установке и без дополнительных флагов ваша версия Clang должна использовать C ++ 14,однако, похоже, это было изменено тем, кто поддерживает эту систему или сопровождающим пакета.

Чтобы убедиться, что вы используете самый последний стандарт языка C ++, добавьте -std=c++17 к вызову компилятора или по крайней мере -std=c++14если C ++ 17 слишком недавний по какой-то причине, например, совместимость со старыми установками компилятора.В частности, если вы программируете для университетского класса, вы можете попросить уточнить, какой стандарт C ++ приемлем для использования.

...