Je suis un peu confus par le code suivant:
#include <iostream>
const char* f()
{
const char* arr[]={"test"};
return arr[0];
}
int main()
{
auto x = f();
std::cout << x;
}
À mon avis, ce code doit être UB (comportement indéfini). Nous retourner un pointeur vers un style d'élément de tableau à l'intérieur d'une étendue locale. Les choses allaient mal. Cependant, aucun des compilateurs j'ai testé avec se plaindre (j'ai utilisé -Wall -Wextra -pedantic
sur les deux g++ et clang). valgrind
ne se plaint pas non plus.
Le code ci-dessus valide ou est-il UB qu'on ne le pense?
PS: en cours d'exécution, il semble produire le "bon" résultat, c'est à dire l'affichage de "test", mais ce n'est pas une indication de la décision correcte.