Properrr
нужно запилить визуализатор JS-а.
Constantine
https://clang.llvm.org/docs/MSVCCompatibility.html#template-instantiation-and-name-lookup
чета мне кажется, что там не все гладко :)
Properrr
типа визуальное программирование...
Anatoliy
однако ж макрософт контрибьютит в клэнг, няз
Constantine
ну MSVC name lookup это буквально "ВЕСЬ name lookup выполняется в точке инстанцирования"
Properrr
есть API на js-е в desktop приложении. хочу визуализировать код. думал написать интерпретатор js-а в промежуточную модель и представление этой модели в виде графов визуальных
Anatoliy
ну MSVC name lookup это буквально "ВЕСЬ name lookup выполняется в точке инстанцирования"
вот вчера давали ссылку рядом http://codeforces.com/contest/299/submission/17084249
Anatoliy
пример говорит о том, что cl.exe вообще игнорирует парсинг шаблонов, что на фоне такого расточительного name lookup абсурдно
Constantine
https://godbolt.org/g/fzS95P
Anatoliy
https://godbolt.org/g/fzS95P
корректно ведь всё
Constantine
корректно ведь всё
я к тому, что clang в действительности не умеет в MSVC name lookup
Anatoliy
ладно, что такое "MSVC name lookup"? К чему бы привёл он в данном примере? К тому, что выберется f(int)?
Anatoliy
у меня справа написано xor EAX, EAX
Anatoliy
Constantine
clang: функция main() возвращает 0 msvc: функция main() возвращает 42
Anatoliy
аа, совсем справа
Stanislav
ну MSVC name lookup это буквально "ВЕСЬ name lookup выполняется в точке инстанцирования"
Additionally, the MSVC implementation of the STL is fully two-phase clean (validated by /permissive- in MSVC as well as Clang’s -fno-ms-compatibility -fno-delayed-template-parsing). We’ve recently gotten ATL to be two-phase clean; if you find any lingering bugs please be sure to let us know!
Stanislav
c 15.3
Properrr
у шланга варик более логичный, имхо
Anatoliy
если это было неспецифицированно в старых стандартах (что вряд ли), то может быть много легаси кода, который от этого зависит
Constantine
если это было неспецифицированно в старых стандартах (что вряд ли), то может быть много легаси кода, который от этого зависит
clang версия, кажется, из C++03; это холивар, но я абсолютно уверен, что в стандарт принята просто безумно плохая версия
Anatoliy
да кому это надо? вот только в boost::spirit::x3 видел использование таких тонкостей
Stanislav
с /permissive- выдает тоже 0
Anatoliy
что кому надо?
двойной проход
Constantine
двойной проход
я не знаю, зачем в стандарт приняли именно two-phase, спросите кого-нибудь другого
Anatoliy
вот статейка интересная http://talesofcpp.fusionfenix.com/post-8/true-story-i-will-always-find-you
Anatoliy
можно рекурсивные парсеры дефайнить благодаря two-phase name lookup
Constantine
круто
Constantine
а еще можно убить себе ногу любой перегрузкой функции
Constantine
в разных файлах
Anatoliy
круто
очень интересный трюк
Anatoliy
а еще можно убить себе ногу любой перегрузкой функции
Тоже это на ум пришло. Разная семантика, но её и так можно получить.
Constantine
Тоже это на ум пришло. Разная семантика, но её и так можно получить.
В общем, когда на одну чашу весов предлагают култрюки, а на другую что любая перегрузка функции с параметрами, допускающими implicit cast, в разных заголовочных файлах, создает потенциальный ODR violation из-за порядка включения этих файлов, я даже не знаю, что выбрать
Constantine
напомню, что ODR violation это "программа является UB без проверок"
Anonymous
,
Anatoliy
no diagnostic required, значит слишком дорого проверять. Язык переусложнён. Чего стоит этот using std::chrono; year_month_day ymd = 2016y/May/29d; пример. Просто бред. Ради литералов встраивают DSEL в стандартную библиотеку.
Anatoliy
Я вот пожертвовал бы вполне рантаймом на парсинг строки "2016/03/29". Не жалко.
Anatoliy
Тем более её тоже compile time можно распарсить
Constantine
И я вам могу набросать очень простые примеры, когда two-phase name lookup делает UB из достаточно безобидного кода при легкой модификации
Anatoliy
Да я верю. Может быть у них надежда на модули?
Constantine
Ничего не меняется
Constantine
С точки зрения модулей
Anatoliy
Ничего не меняется
модули ничего не дадут?
Assasin
меняется удобство разработки как минимум
Constantine
Нет, two phase name lookup не упрощает модули
Assasin
мне лично намного приятнее будет писать код в одном .cpp файле, а не делить на интерфейсы
Constantine
Он вообще влияет на конкретные случаи, когда name lookup выполняется в шаблонном коде, не содержащем dependent names
Assasin
а, вы не вообще имеете в виду, извиняюсь.
Constantine
вот это просто гениально, ящетаю
Anatoliy
https://godbolt.org/g/FifQ9Q
а по стандарту то что должно быть? mov EAX, 1?
Constantine
а по стандарту то что должно быть? mov EAX, 1?
в том и проблема, что вот это - стандарт
Constantine
ни один не-шаблонный метод не сможет вызвать эту специализацию is_null для std::unique_ptr
Anatoliy
так это наоборот защита от "доопределения" получается
Anatoliy
понятно что можно хедеры в разном порядке включить и будет разное поведение. Но это в обоих случаях верно было бы
Constantine
мусор это получается
Anatoliy
ADL сработал
Constantine
именно
Constantine
в ADL другие правила!
Александр
скажите пожалуйста, какого чёрта std::any не конструируется от move-only типов?
Anatoliy
няз ADL изобрели для операторов
Anatoliy
а это - я фз для чего
Anonymous
какое ПО установить , чтобы делать игру на directX используя си++? есть ms visualstudio 2017 и Qt creator
Anonymous
на windows 7
Constantine
скажите пожалуйста, какого чёрта std::any не конструируется от move-only типов?
в std вообще типичные проблемы с moveonly, начиная с make_vector
Александр
в std вообще типичные проблемы с moveonly, начиная с make_vector
ну сам вектор норм функционирует. просто мувать надо постоянно. но с any вообще не ясно
Александр
Constantine
сам vector работает даже для не-MC типов
Anatoliy
пишут, что есть предложение исправить https://stackoverflow.com/a/27194652/1430927