Size: a a a

2020 August 20

CD

Constantine Drozdov in pro.cxx
Anatoly Tomilov
не понял. По стандарту запрещено, что я для G++ взял и написал свою собственную стандартную библиотеку? В стандарте вообще есть такое слово gcc? Как-то слабо верится. Как такое в стандарте может быть запрещено вообще?
Инструкция к стиральной машине не запрещает стирать урановый лом. Правила определяются в сторону разрешено, а не запрещено
источник

AT

Anatoly Tomilov in pro.cxx
какой ритуал снимает UB у тех, кто коммитит в репозитории libc++/libstdc++?
источник

CD

Constantine Drozdov in pro.cxx
Anatoly Tomilov
какой ритуал снимает UB у тех, кто коммитит в репозитории libc++/libstdc++?
ритуал чтения внутренней документации конкретного компилятора
источник

AT

Anatoly Tomilov in pro.cxx
так я ж прочитал
источник

ПК

Побитый Кирпич... in pro.cxx
Anatoly Tomilov
какой ритуал снимает UB у тех, кто коммитит в репозитории libc++/libstdc++?
Они поддерживают согласованность между кодом стандартной библиотеки, своим изменением и кодом компилятора
источник

AT

Anatoly Tomilov in pro.cxx
всё. Теперь можно?
источник

CD

Constantine Drozdov in pro.cxx
там наверняка описано, почему < в std::less означает именно less а не <
источник

AT

Anatoly Tomilov in pro.cxx
Побитый Кирпич
Они поддерживают согласованность между кодом стандартной библиотеки, своим изменением и кодом компилятора
так и я поддержал
источник

m

magras in pro.cxx
Давайте я попробую вас помирить?

Я бы дал примерно такое определение UB - это implementation defined behavior, которое нигде не описано и может изменятся по велению левой пятки разработчика компилятора.

Соответственно для разработчика стандартной библиотеки приемлемо, что весь код находится в зоне UB, потому что они тесно взаимодействуют с разработчиками компилятора. Для нас простых смертных, UB - это слишком большой риск, чтобы связываться.
источник

CD

Constantine Drozdov in pro.cxx
Anatoly Tomilov
так я ж прочитал
точно? и каким образом std::initializer_list меняет смысл?
источник

ПК

Побитый Кирпич... in pro.cxx
magras
Давайте я попробую вас помирить?

Я бы дал примерно такое определение UB - это implementation defined behavior, которое нигде не описано и может изменятся по велению левой пятки разработчика компилятора.

Соответственно для разработчика стандартной библиотеки приемлемо, что весь код находится в зоне UB, потому что они тесно взаимодействуют с разработчиками компилятора. Для нас простых смертных, UB - это слишком большой риск, чтобы связываться.
То что ты назвал UB это Unspecified behavior как раз. И по сути да, код реализации std либы unspecified (не обязан документироваться и поддерживаться в совместимости)
источник

AT

Anatoly Tomilov in pro.cxx
Anatoly Tomilov
видимо у тебя какое-то непонимание основных вещей. Беру git clone https://github.com/llvm-mirror/libcxx.  Беру делаю git checkout old-old-revision, а затем делаю git checkout master -- include/initializer_list. Собираю это с clang-ом из транка. Что я нарушил?
вот эту ситуацию как объяснить?
источник

CD

Constantine Drozdov in pro.cxx
какие ограничения на него наложены
источник

d

d7d1cd in pro.cxx
Короче, компилятор не поддерживает возможность реализации initializer_list. По выше приведенному примеру вставил код initializer_list, а в main прописал инициализацию переменной класса через {}. В итоге компилятор дает ошибку в этой строке "Text '{' is unexpected.". Но ведь я массивы могу инициализировать через {}. Или это совершенно разные вещи?
источник

ПК

Побитый Кирпич... in pro.cxx
d7d1cd
Короче, компилятор не поддерживает возможность реализации initializer_list. По выше приведенному примеру вставил код initializer_list, а в main прописал инициализацию переменной класса через {}. В итоге компилятор дает ошибку в этой строке "Text '{' is unexpected.". Но ведь я массивы могу инициализировать через {}. Или это совершенно разные вещи?
Возможность юзать { для initializer_list должна быть реализована в компиляторе
источник

АК

Александр Караев... in pro.cxx
d7d1cd
Короче, компилятор не поддерживает возможность реализации initializer_list. По выше приведенному примеру вставил код initializer_list, а в main прописал инициализацию переменной класса через {}. В итоге компилятор дает ошибку в этой строке "Text '{' is unexpected.". Но ведь я массивы могу инициализировать через {}. Или это совершенно разные вещи?
auto a = { 1, 2, 3 };
что выдаст?
источник

SK

Stas Koynov in pro.cxx
ребятки а киньте в меня ссылку на норм С++17 пулл_обьектов можно статический.
источник

AT

Anatoly Tomilov in pro.cxx
Побитый Кирпич
Они поддерживают согласованность между кодом стандартной библиотеки, своим изменением и кодом компилятора
Это точно за пределами определения UB из Стандарта. Это вообще никак не может регулироваться кем-то, кроме как самими разработчиками. Если говорить строго, то использование не финальной версии стандартной библиотеки, когда там всё в точности реализовано по конкретной версии стандарта — UB с твоей точки зрения. А если там находят постфактум несоответствие стандарту в одной букве, то всё, приплыли. У всех UB, кто собрал, используя её.
Т.е. мы, скорей всего, никогда не компилировали что-то без UB.
источник

d

d7d1cd in pro.cxx
Александр Караев
auto a = { 1, 2, 3 };
что выдаст?
Auto type is not supported for brace list initialization.
источник

АК

Александр Караев... in pro.cxx
Александр Караев
auto a = { 1, 2, 3 };
что выдаст?
@tomilovanatoliy
как должна работать эта конструкция с точки зрения компилятора?
источник