All streams
Search
Write a publication
Pull to refresh
43
0
Валерий Дмитриев @rotor

Пользователь

Send message
Если критика адекватна, то она тоже нужна. Особенно молодому журналу. Так что вы не серчайте, а лучше на ус мотайте.
Вы можете сами себе сделать пакет, если вам нужно, набрав вместо
make install
команду
checkinstall --install=no

PS
Я бы, только, дополнил Makefile секцией uninstall:
uninstall:
        rm -rf $(DEST)
        texhash

Вы еще спрашиваете? Конечно переводите. Такое как горячие пирожки разлетится.
PS Интересно, в книге раскрыта тема связи теории категорий с шаблонами С++?
PopcornTime по торрент файлу давно умеет. На счет магнет ссылки не знаю. Не проверял.
Цццццццццццц
Очень хорошо что GitHub разблокировали. Но очень плохо, что он прогнулся под самодуров.
У вас в 4-м примере. Шаблоны, так что это именно c++. Т.е. Расширение правильное было. Нужен именно clang++.
Специально ради вашего поста обновил Clang с 3.2 на
3.4
$ clang -v
Ubuntu clang version 3.4-1ubuntu1 (trunk) (based on LLVM 3.4)
Target: x86_64-pc-linux-gnu
Thread model: posix

Но во всех примерах получаю: clang: warning: argument unused during compilation: '-Rpass=loop-vectorize'
В примере #4 вы видимо имели ввиду clang++ -O3 -Rpass=loop-vectorize -S test4.cpp -o /dev/null
Если есть идеи как спасать ГитХаб, то и меня возьмите.
Нашел баг!!! coliru.stacked-crooked.com/a/d919304815452d35
Все таки не зря encyclopedist с самого начала сказал о проблемах с выравниванием, а я вместо того что бы устранить грабли принялся дебажить изначально дефективный код.
Если кратко, как исправлен баг:
Добавлено
template <std::size_t Len, typename ...Types>
struct aligned_union {
    static constexpr size_t max(size_t r0) {return r0;}
    template <typename ...R> static constexpr size_t max(size_t r0, R... r) {return ( r0 > max(r...) ? r0 : max(r...) );}
    static constexpr std::size_t alignment_value = max(alignof(Types)...);
    struct type { alignas(alignment_value) unsigned char _[max(Len, sizeof(Types)...)]; };
};

т.к. в этой версии gcc, видимо, std::aligned_union уже удален.
    unsigned char mem[usize];
заменено на
    typedef typename aligned_union<usize, Types...>::type aligned_type;
    aligned_type _storage;
    aligned_type *mem = &_storage;

Таким образом, проблема решилась добавлением выравнивания.

В моем случае можно было поступить и проще. Просто заменить unsigned char mem[usize]; на
alignas(max(alignof(Types)...)) unsigned char mem[usize];
Обязательно. Но вчера я так и не нашел причину. Сложность еще и в том, что «дебажить» приходится в браузере, что весьма необычно для меня. (у меня нет g++-4.9.0, а только g++-4.9.2 и g++-4.8.1)
Да, получилось весьма симпатично.
Спасибо за перевод.
Пару вопросов по тексту, если можно.
static constexpr std::size_t alignment_value = std::max({alignof(Types)...});
Я верно понимаю, что в c++14 std::max стало можно использовать в constexpr выражениях?

static_cast<T*>(static_cast<void*>(&_storage))
Почему не reinterpret_cast<T*>(&_storage)? Довольно необычная конструкция прежде ее не видел.
Круто! Вы успели перевести быстрее чем я прочитать.
Да, каюсь. Глупость ляпнул.
Сейчас еще раз подумал. Мы же добиваемся такого же поведения, как и при использовании динамического выделения. Так что, запрещенный конструктор копирования и дефолтный конструктор переноса — то что надо. Собственно unique_ptr так и работает.
Таким образом, с копированием/переносом проблем нет.
Да нет, все нормально. Мне самому интересно. Сижу вот до сих пор дебажу прямо по вашей ссылке. Надо же выяснить в чем там дело.
Ну да assert просто сигнализирует, что не был вызван assign. Который инстацирует объект. Если объект не инстацирован, то падать оно конечно будет т.к. в памяти не то что мы ожидаем. Просто такого там быть не должно. Но в g++-4.9.2 проблема не воспроизводится.

Information

Rating
Does not participate
Location
Уфа, Башкортостан(Башкирия), Россия
Date of birth
Registered
Activity