Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>%SUBJ% откомпилировался без проблем [VS2017]. КД>С моей измученной нарзаном точки зрения, это не правильно. КД>Неявное приведение указателя к bool — это, в принципе, нормально. КД>А вот обратно — это явно ненормально. КД>Что думаете по этому поводу?
Старые компиляторы обрабатывают 'false' по тем же правилам, что и литеральный ноль. Простая замена 'false' на 'true' приводит к ошибке компиляции. В новых же компиляторах уже и 'false' обрабатывается по специальным, более строгим, правилам.
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>>%SUBJ% откомпилировался без проблем [VS2017]. КД>>С моей измученной нарзаном точки зрения, это не правильно. КД>>Неявное приведение указателя к bool — это, в принципе, нормально. КД>>А вот обратно — это явно ненормально. КД>>Что думаете по этому поводу?
R>Старые компиляторы обрабатывают 'false' по тем же правилам, что и литеральный ноль. Простая замена 'false' на 'true' приводит к ошибке компиляции. В новых же компиляторах уже и 'false' обрабатывается по специальным, более строгим, правилам.
Ты относишь VS2017 к старым или новым компиляторам?
Здравствуйте, uzhas, Вы писали:
R>>Старые компиляторы обрабатывают 'false' по тем же правилам, что и литеральный ноль. Простая замена 'false' на 'true' приводит к ошибке компиляции. В новых же компиляторах уже и 'false' обрабатывается по специальным, более строгим, правилам.
U>Ты относишь VS2017 к старым или новым компиляторам?
Мда, вопрос риторический, конечно... Сейчас копался в стандарте, пытаясь понять, как оно должно быть, запутался вконец.
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, rg45, Вы писали:
R>Мда, вопрос риторический, конечно... Сейчас копался в стандарте, пытаясь понять, как оно должно быть, запутался вконец.
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Что думаете по этому поводу?
Что в С++11 и раньше, следом за С, любой целый compile time 0 приводится по умолчанию к любому нулевому указателю.
Например:
void* p = sizeof(p) - szieof(void*);
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, rg45, Вы писали:
R>Старые компиляторы обрабатывают 'false' по тем же правилам, что и литеральный ноль. Простая замена 'false' на 'true' приводит к ошибке компиляции. В новых же компиляторах уже и 'false' обрабатывается по специальным, более строгим, правилам.
Вроде как любой CT-ноль можно неявно привести к нулевому указателю любого типа жеж?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, uzhas, Вы писали:
U>для деталей ищи в ветке "формальные аспекты"
Типа в С++14 решили на совместимость с С забить?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, rg45, Вы писали:
R>Например, gcc придерживается другого мнения: http://ideone.com/x7bxTu
А если чистый С взять?
Типа С++14 поддержали?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, rg45, Вы писали:
R>А в "чистом" C нет "false" и "true"
Ну до С++14 любой CT-ноль кастился к нулевому указателю в обоих языках.
например, такой: 1!=2
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, rg45, Вы писали:
R>Все верно. Но почему ты придаешь этому такое значение? Почему так важно сохранить эту совместимость?
У мну есть хедеры, разделяемые между языками, и в количестве
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, rg45, Вы писали:
U>>Ты относишь VS2017 к старым или новым компиляторам? R>Мда, вопрос риторический, конечно... Сейчас копался в стандарте, пытаясь понять, как оно должно быть, запутался вконец.
Ну, наконец-то.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Erop, Вы писали:
R>>Все верно. Но почему ты придаешь этому такое значение? Почему так важно сохранить эту совместимость?
E>У мну есть хедеры, разделяемые между языками, и в количестве
И в этих хедерах массово используется инициализация указателей произвольными компайл-тайм выражениями, которые проблематично заменить на литеральный ноль? Можешь привести пару примеров?
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, rg45, Вы писали:
R>И в этих хедерах массово используется инициализация указателей произвольными компайл-тайм выражениями, которые проблематично заменить на литеральный ноль?
Я используется или нет. Компилятор, которым я это жую, С++14 в такой степени ещё не поддерживает
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском