#define bRead(value, bit) (((value) >> (bit)) & 0x01)if( ( map & 0x3E ) == 0 ).! имеет булеву семантику. Если bRead объявлена не как bool bRead( ... ), то использование оператора ! будет вводить людей в заблуждение. Функция называется b-Read, в которой, согласно Венгерской нотации, b означает тип результата bool. Слово Read означает действие, относительно которого возвращаемое булево значение обычно воспринимается как успешность совершения действия: получилось или нет сделать Read.b тоже означает Бит (или, чего еще хуже, функция возвращает бит в виде значения bool), то пользователь это поймет не сразу. Особенно когда перед bRead стоит оператор ! и все условие выглядит как проверка на то, что следующие 5 бит после первого прочитать не удалось.( map & 0x3E ) == 0, это однозначно и понятно читается. Скобки ставят акцент действия и знание порядка операторов тут не при чем. Оговорка - не из стандарта. ... Правильную и неправильную реализацию формализовать нельзя (без явной аттрибуции), потмоу что и тот и тот код может быть верным в зависимости от "оговорок".
а ведь ты мог бы просто согласиться с тем, что твое изложение идет с т.з. некоторой этики разработки. ... Ты оперировал на уровне некоторой смысловой надстройки над стандартом, созданной с учетом изложения стандарта.
Мне не с чем соглашаться.
Вообще, я очень надеюсь, что в стандарте это помечено как UB.
std::is_trivial. И это будет ошибкой. Именно поэтому я даже предположить не мог, что объект с указателем формально может считаться тривиальным.
Если он владеет объектом, то, по определению (из данной вами ссылки), не может быть тривиальным, потому что у него будет нетривиальный конструктор копирования и деструктор (не рассматриваем вариант с утечкой памяти).
Сам по себе указатель - тривиальный тип
но класс, содержащий указатель (и владещющий адресуемым объектом) не является тривиальным типом.
П2.2 регламента работы сервиса требует чтобы сперва ты убедился в отсутствии ответов на свой вопрос.
В интернете ответы на этот вопрос имеются в избытке.