Un grand nombre d'opérations en C++ entraîner un comportement non défini, où la spec est complètement muet sur ce que le programme du comportement doivent être et permet à tout pour arriver. De ce fait, il y a toutes sortes de cas où les gens ont un code qui compile en debug mais pas en mode release, ou qui fonctionne jusqu'à un apparemment sans rapport avec le changement est fait, ou qui travaille sur une machine mais pas sur un autre, etc.
Ma question est de savoir si il existe un utilitaire qui ressemble à l'exécution de code C++ et les drapeaux de tous les cas où le programme invoque un comportement indéfini. Alors que c'est bien que nous avons des outils comme valgrind et vérifié STL implémentations, ce n'est pas aussi forte que ce que je suis en train de réfléchir - valgrind peut avoir des faux négatifs si vous corbeille de mémoire que vous avez encore allouées, par exemple, et vérifié STL implémentations ne prends pas de supprimer au moyen d'une base de pointeur de classe.
Cet outil existe pas? Ou serait-il même être utile de l'avoir qui traînent à tous?
EDIT: je suis conscient qu'il est en général indécidable statiquement vérifier si un programme C++ peut jamais exécuter quelque chose qui a un comportement indéfini. Toutefois, il est possible de déterminer si une exécution spécifique en C++ produit un comportement indéfini. Une façon de le faire serait de faire une C++ interprète qui suit dans le code selon les définitions figurant dans la spécification, à chaque point de déterminer si oui ou non le code a un comportement indéfini. Ce ne sera pas en mesure de détecter un comportement indéfini qui ne se produit pas sur un programme particulier d'exécution, mais il va trouver tout un comportement indéfini qui en réalité se manifeste dans le programme. Ceci est lié à la façon dont il est Turing-reconnaissable pour déterminer si un TM accepte une entrée, même si ça reste indécidable en général.
Merci!