Список инициализаторов в Clang
Сегодня Apple обновляет инструменты командной строки для Xcode, а затем обновляет clang с 318.0.58 до 318.0.61.
Я попытался использовать список инициализаторов, но не могу скомпилировать ниже код.
#include <iostream>
#include <random>
#include <initializer_list>
int main()
{
std::mt19937 rng(time(NULL));
std::initializer_list<double> probabilities =
{
0.5, 0.1, 0.1, 0.1, 0.1, 0.1
};
std::discrete_distribution<> cheat_dice (probabilities);
int a[6] = { };
for ( int i = 0 ; i != 1000; ++i )
{
++a[cheat_dice(rng)];
}
for ( int i = 0; i != 6; ++i )
{
std::cout << i + 1 << "=" << a[i] << std::endl;
}
}
Затем я попытался скомпилировать.
$ clang++ -stdlib=libc++ foo.cpp
Журнал ошибок
foo.cpp:9:10: error: no member named 'initializer_list' in namespace 'std'
std::initializer_list<double> probabilities =
~~~~~^
foo.cpp:9:33: error: expected '(' for function-style cast or type construction
std::initializer_list<double> probabilities =
~~~~~~^
foo.cpp:9:35: error: use of undeclared identifier 'probabilities'
std::initializer_list<double> probabilities =
^
foo.cpp:10:5: error: expected expression
{
^
foo.cpp:14:46: error: use of undeclared identifier 'probabilities'
std::discrete_distribution<> cheat_dice (probabilities);
^
5 errors generated.
С другой стороны, я могу скомпилировать код выше с помощью gcc-4.7.1-RC-20120606.
$ g++ -std=c++11 foo.cpp
Не содержит ли список инициализаторов поддержки Apple clang?
Версия Clang:
$ clang++ -v
Apple clang version 3.1 (tags/Apple/clang-318.0.61) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin11.4.0
Thread model: posix
Ответы
Ответ 1
Попробуйте указать -std=c++0x
(как правильно указано @jweyrich) как часть командной строки clang
. По умолчанию для clang
используется режим С++ 98. Списки инициализаторов - это функция С++ 11.
Кроме того, на странице поддержки Clang С++ 98 и С++ 11 вы можете проверить статус различных новых стандартных функций С++. Например, списки инициализаторов доступны в 3.1 (и выше).
Ответ 2
Скомпилируйте с помощью команды:
clang++ -stdlib=libc++ -std=c++0x foo.cpp
Обратите внимание, что -std=c++11
также работает. На моей машине:
$ clang --version
приводит к:
Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin12.2.0