У меня возникли проблемы с пониманием, кто виноват здесь (если есть). Следующий код представлен по-другому в g ++ по сравнению с MS Visual Studio C ++.
#include <iostream>
int main() {
int a = 10; //some random value
int* ptr = &a;
//a temp rvalue of type `const int* const' created in g++
//no temp created in MS Visual Studio
const int* const &alias_for_ptr = ptr;
ptr = 0; //null ptr
if (ptr == alias_for_ptr)
//This will execute in MS Visual Studio C++
//But not in g++
std::cout << "ptr == alias_for_ptr" << std::endl;
else
//This will execute in g++
//But not in MS Visual Studio C++
std::cout << "ptr != alias_for_ptr" << std::endl;
return 0;
}
Теперь я понимаю, что неприятная линия -
const int* const &alias_for_ptr = ptr;
и в g ++ временное значение типа const int* const
создается из ptr. Но MSVS не создает ценности. И я не могу найти где-нибудь в стандарте c ++, который объясняет, что должно произойти, имеет ли результат неопределенное поведение или стандарт оставляет его на усмотрение компилятора. Так почему же g ++ и MS Visual Studio C ++ по-разному выполняют следующий код? Что должно произойти?