J'essaie de comprendre si le comportement différent exposé par gcc et clang dans la sortie de ce simple programme C++11 est dû à un bogue dans clang (Xcode 5.0.2, OS X 10.8.5). Le code est le suivant :
#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;
}
Comme indiqué, j'essaie d'utiliser l'initialisation uniforme pour initialiser un tableau multidimensionnel anonyme (resp. nommé) de taille 3x3
. En compilant avec gcc 4.7 de MacPorts, la sortie attendue est obtenue :
$g++-mp-4.7 -std=c++11 dyn_matrix.cpp -o dyn_matrix
$ ./dyn_matrix
2
2
$
Inversement, dans le cas où clang est utilisé, la sortie se lit comme suit :
$ clang++ -std=c++11 -stdlib=libc++ dyn_matrix.cpp -o dyn_matrix_clang
$ ./dyn_matrix_clang
2
4
$
Dans ce cas, le résultat est (apparemment) erroné. clang --version
rapports :
Apple LLVM version 5.0 (clang-500.2.75) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin12.5.0
Thread model: posix
Qui est à blâmer ? Moi, gcc ou clang ?
MISE À JOUR du 11 décembre 2013 : Le bogue aurait dû être corrigé dans la r196995. Malheureusement, nous ne savons toujours pas combien de temps il faudra avant qu'Apple mette à jour la version de clang fournie avec Xcode.
MISE À JOUR du 9 décembre 2013 : J'ai soumis un rapport de bogue sur la plateforme bugzilla de LLVM. Il a effectivement été reconnu comme un bug, un patch est actuellement en cours d'examen, voir http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20131209/095099.html .
Gracias.