Оптимизатор прав?C++

Программы на C++. Форум разработчиков
Anonymous
Оптимизатор прав?

Сообщение Anonymous »

Я ожидаю, что следующая программа всегда будет возвращать 0. Однако в Visual Studio 2013 (обновление 4) программа завершает работу 1 в сборках выпуска. Я не уверен, является ли это ошибкой или оптимизатор компилятора корректен и полагается на какое-то пограничное поведение. Если макрос CONST отключен, exe-файл Release возвращает 0. Если оптимизатор действительно прав, могу ли я узнать причину, по которой ему разрешено генерировать код, который он делает?
#if 1
# define CONST const
#else
# define CONST
#endif

class TypeId {
public:
bool operator== (TypeId const & other) const
{
return id == other.id;
}

private:
TypeId (void const * id)
: id(id)
{}

public:
template
static TypeId Get ()
{
static char CONST uniqueMemLoc = 0;
return TypeId(&uniqueMemLoc);
}

private:
void const * id;
};

int main(int, char **)
{
typedef int A;
typedef unsigned int B;

if (TypeId::Get() == TypeId::Get()) {
return 1;
}
return 0;
}


Подробнее здесь: https://stackoverflow.com/questions/290 ... er-correct

Вернуться в «C++»