Я пытаюсь понять, отличается ли поведение gcc против clang от вывода этой простой программы С++ 11 из-за ошибки в clang (Xcode 5.0.2, OS X 10.8.5). Код выглядит следующим образом:
#include <iostream>
int main() {
int matrix[][3]{{1,2,3}, {4,5,6}, {7,8,9}};
auto dyn_matrix = new int[3][3]{{1,2,3}, {4,5,6}, {7,8,9}};
std::cout << matrix[0][1] << std::endl;
std::cout << dyn_matrix[0][1] << std::endl;
return 0;
}
Как показано, я пытаюсь использовать единую инициализацию для инициализации многомерного массива анонимного (соответственно названного) размера 3x3
. При компиляции с gcc 4.7 из MacPorts получается ожидаемый результат:
$g++-mp-4.7 -std=c++11 dyn_matrix.cpp -o dyn_matrix
$ ./dyn_matrix
2
2
$
И наоборот, в случае использования clang вывод:
$ clang++ -std=c++11 -stdlib=libc++ dyn_matrix.cpp -o dyn_matrix_clang
$ ./dyn_matrix_clang
2
4
$
В этом случае результат (по-видимому) неправильный. clang --version
сообщает:
Apple LLVM version 5.0 (clang-500.2.75) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin12.5.0
Thread model: posix
Кто виноват? меня, gcc или clang?
ОБНОВЛЕНИЕ 11 декабря 2013 г. Ошибка должна быть исправлена в r196995. К сожалению, мы все еще не знаем, сколько времени потребуется, прежде чем Apple обновит версию clang, поставляемую с Xcode.
ОБНОВЛЕНИЕ 9 ДЕКАБРЯ 2013 ГОДА: Я отправил отчет об ошибке на платформе bugzilla LLVM. Это действительно признано ошибкой, в настоящее время рассматривается патч, см. http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20131209/095099.html.
Спасибо.