Berkus
Vladimir
Berkus
Berkus
Andrei
Berkus
к тому же раст отошел от емскриптена сейчас, это легаси тулчейн
Andrei
А.
Andrei
Беркус, что-то от тебя последнее время одни растаманские посты, ты сменил веру?
Vladimir
Vladimir
Напиши мейкфайл или что у сиплюсплюсеров принято, и юзай
Berkus
наверное на мейкфайле можно нагородить такое, но чот я ссыкую
Vladimir
Да блин, я растоман, для меня это привычно.
Nikita
О это чатик о расте?
Berkus
Berkus
Vladimir
Чтоб ты довольствовался богоподобными плюсами
Vladimir
Вон даже Раст переписали на си++
Berkus
Berkus
Vladimir
https://www.reddit.com/r/rust/comments/7lu6di/mrustc_alternate_rust_compiler_in_c_now_broken/
Anonymous
Привет всем. Можете посоветовать какие-нибудь либы для работы с изображениями?
Anonymous
а что-нибудь поменьше есть? Мне бы просто с пикселями работать, а-ля битмапы из SDL
Roman
Anonymous
да не знаю, не пробовал
Roman
да не знаю, не пробовал
C++ , картинки открывать можно, работать как с битмапами. Вроде по описанию то что вам нужно
Anonymous
Хорошо, спасибо, гляну
Egor
Дамы и господа, я не понимаю, что происходит с перегрузкой в этом примере:
https://godbolt.org/g/t92L7f
Заинклудили math.h, реализовали свой double pow(double a, int b) и внезапно получили, что pow(2, 10) на gcc/clang/icc вызывает какой-то библиотечный pow, а вот на вижаке - наш собственный. При этом ни у кого ошибок компиляции (или какого-нибудь ambiguous) не возникает.
Как так получилось? Если, например, убрать math.h и добавить свой pow(double, double), то вызывается pow(double, int)
Evgenii
Дамы и господа, я не понимаю, что происходит с перегрузкой в этом примере:
https://godbolt.org/g/t92L7f
Заинклудили math.h, реализовали свой double pow(double a, int b) и внезапно получили, что pow(2, 10) на gcc/clang/icc вызывает какой-то библиотечный pow, а вот на вижаке - наш собственный. При этом ни у кого ошибок компиляции (или какого-нибудь ambiguous) не возникает.
Как так получилось? Если, например, убрать math.h и добавить свой pow(double, double), то вызывается pow(double, int)
видимо кто-то реализовал pow(int, int)?
Roman
Roman
Запустил!
Roman
step in
Evgenii
Egor
Ах да, дебаггер. Прикольно. А откуда там вообще pow(int, int) взялся?
Roman
там template<T1, T2> pow
Egor
Потрясающе. И как оно, интересно, работает?
Roman
When a template function and a non-template function are both viable for resolving a function call, the non-template function is selected.
Cuno
SFNAE же, судя по асм листингу.
Roman
т.е. если ты напишешь нешаблонный pow(int, int) то он получает приоритет, и это не ambigous
Cuno
_ZSt3powIiiEN9__gnu_cxx11__promote_2IT_T0_NS0_9__promoteIS2_Xsr3std12__is_integerIS2_EE7__valueEE6__typeENS4_IS3_Xsr3std12__is_integerIS3_EE7__valueEE6__typeEE6__typeES2_S3_
> is_integer is_integer
Egor
Nice, всем спасибо. А может кто-нибудь ещё и знает, как должна себя вести шаблонная pow? Ну вряд ли же она вообще любые типы умеет возводить в степень
Roman
SFINAE
Roman
enable_if можно возводить
Egor
В смысле? pow умеет не только какие-то числа в степень возводить?
Berkus
можно строку в степень возвести)
Egor
Ну, такое.
http://en.cppreference.com/w/cpp/numeric/math/pow — нашёл ответ на свой вопрос тут
Egor
> A set of overloads or a function template for all combinations of arguments of arithmetic type not covered by 1-3). If any argument has integral type, it is cast to double. If any argument is long double, then the return type Promoted is also long double, otherwise the return type is always double.
Roman
Вообще в C++11 благодаря decltype в типе возвращаемого значения можно все такие перегрузки заменить одним шаблоном
Roman
Кто-нибудь знает зачем такое могли сделать? : https://eda-playground.readthedocs.io/en/latest/_static/systemc-2.3.1/sysc/a00345_source.html
// token concatenation
#define SC_CONCAT_HELPER_( a, b ) \
SC_CONCAT_HELPER_DEFERRED_( a, b )
#define SC_CONCAT_HELPER_DEFERRED_( a, b ) \
SC_CONCAT_HELPER_MORE_DEFERRED_( a,b )
#define SC_CONCAT_HELPER_MORE_DEFERRED_( a, b ) \
a ## b
Evgenii
чтобы скучно не было?
Roman
Нет, это как бы продуктовый код, IEEE стандарт
Egor
Кажется, это какая-то магия и костыли, чтобы если мы подставляем макрос в макрос, то чтобы он то ли развернулся, то ли чтобы не развернулся
Roman
может быть a ## b ## c не работает иначе? (просто предположение)
Roman
Нет, используют этот SC_CONCAT_HELPER_ именно вместо ##
Egor
Да, это нормально, потому что иначе что-то может лишний раз развернуться или не развернуться
Evgenii
Roman
А да, понял
Roman
std::cout « SC_STRINGIFY_HELPER_(SC_CONCAT_HELPER_(SC_CONCAT_HELPER_(a,b),c));
Roman
Если не вкладывать, а сделать:
#define SC_STRINGIFY_HELPER_( Arg ) \
#Arg
#define SC_CONCAT_HELPER_( a, b ) \
a ## b
то результат будет плачевный
Roman
» SC_CONCAT_HELPER_(SC_CONCAT_HELPER_(a,b),c)
вместо abc
Egor
Ну да
Egor
https://ideone.com/Z83ohf
Berkus
Berkus
я когда-то находил почему такое правило, но сейчас лень повторно искать
Berkus
ищи token pasting или что-то подобное в препроцессоре
Thorn
обычно препроцессор пытается подставлять макросы рекурсивно, пока может, но к аргументам # и ## macro expansion не применяется
Arseny
Хм. Я помнию что для #define CONCAT нужен был второй вложенный макрос чтобы все развернулось. Зачем третий я не до конца понимаю.
Arseny
Ну вот а в примере выше зачем-то двойная вложенность для конкатенации
Igor
https://akrzemi1.wordpress.com/2016/02/27/another-polymorphism/
TIL variant<> это не только поумневший union, но и интересный инструмент для статического полиморфизма
а какие ещё юзкейсы для variant встречаются на практике, кроме функционального Result<OkType, ErrorType>?
Дмитрий ⬡
Anonymous
Приветствую.
Anonymous
Вопрос небольшой есть, стоит ли начинать учить .net, а потом уже перейти на C++?
Олександр
Логика?
Deleted Account