これは、prior questionまでのフォローアップです。Visual StudioとClangはstd :: bad_array_new_lengthをスローしません
次のプログラムでは、Visual Studio 2015 and Clangは両方ともstd::bad_array_new_length
をスローしません。 gcc does。
#include <iostream>
#include <random>
#include <exception>
#include <new>
int main()
{
std::random_device rd;
std::uniform_int_distribution<int> dist(2,2);
try {
auto arr = new int[dist(rd)][4][2]{{{1}},{{2}},{{3}}}; // may write to unallocated memory
auto val1 = arr[0][0][0];
auto val2 = arr[1][0][0];
auto val3 = arr[2][0][0];
auto result = val1 + val2 + val3;
std::cout << result;
}
catch (std::exception const& e) {
std::cerr << e.what() << '\n';
}
return 0;
}
Visual Studioでは、メッセージが表示されずにプログラムがクラッシュします。 Clangにはエラーはありません(this answerで言及されているavoided the allocationなので)。
3つのコンパイラ、3つの結果。これは未定義の動作ですか?これはVisual Studioのバグですか?