C++14 done
От: uncommon Ниоткуда  
Дата: 19.08.14 01:03
Оценка: 239 (23)
Голосование по C++14 закончилось, и стандарт отправлен на печать: https://isocpp.org/blog/2014/08/we-have-cpp14

Если кому нужен последний вариант в pdf, я только что скомпилил draft (N3936 + все изменения с февраля по сегодняшний день, напрямую с https://github.com/cplusplus/draft ): https://www.dropbox.com/s/zbilc1x6bo6rfan/c%2B%2Bstd14-draft.pdf
Re: C++14 done
От: jazzer Россия Skype: enerjazzer
Дата: 19.08.14 03:39
Оценка: 35 (5)
Здравствуйте, uncommon, Вы писали:

U>Голосование по C++14 закончилось, и стандарт отправлен на печать: https://isocpp.org/blog/2014/08/we-have-cpp14


U>Если кому нужен последний вариант в pdf, я только что скомпилил draft (N3936 + все изменения с февраля по сегодняшний день, напрямую с https://github.com/cplusplus/draft ): https://www.dropbox.com/s/zbilc1x6bo6rfan/c%2B%2Bstd14-draft.pdf


Поддержка по компиляторам:
CLang
GCC
Intel
MSVC
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: C++14 done
От: zaufi Земля  
Дата: 19.08.14 04:14
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, uncommon, Вы писали:


U>>Голосование по C++14 закончилось, и стандарт отправлен на печать: https://isocpp.org/blog/2014/08/we-have-cpp14


U>>Если кому нужен последний вариант в pdf, я только что скомпилил draft (N3936 + все изменения с февраля по сегодняшний день, напрямую с https://github.com/cplusplus/draft ): https://www.dropbox.com/s/zbilc1x6bo6rfan/c%2B%2Bstd14-draft.pdf


J>Поддержка по компиляторам:

J>CLang
J>GCC
J>Intel
J>MSVC

поддержка раскраски синтаксиса по редакторам/IDE:
  • kate/kdevelop

  • others
  • Re[3]: C++14 done
    От: uzhas Ниоткуда  
    Дата: 19.08.14 07:20
    Оценка: :))) :))) :)
    Здравствуйте, zaufi, Вы писали:

    Z>поддержка раскраски синтаксиса по редакторам/IDE:

    Z>kate/kdevelop

    не подчеркивает опечатку в "miliseconds"
    Re: C++14 done
    От: Dair Россия https://dair.spb.ru
    Дата: 19.08.14 15:18
    Оценка: +3
    Блин, я и 11 так и не изучил по-человечески, а уже 14...
    Re[2]: C++14 done
    От: jazzer Россия Skype: enerjazzer
    Дата: 19.08.14 15:28
    Оценка: 2 (1)
    Здравствуйте, Dair, Вы писали:

    D>Блин, я и 11 так и не изучил по-человечески, а уже 14...


    Не волнуйся, это багфикс-релиз. Примерно как С++03 для С++98. Реальных изменений по сравнению с С++11 немного и они в основном мелкие (наиболее заметные — это улучшения constexpr и полиморфная лямбда, которая наконец-то сделает Boost.Lambda ненужной):
    http://en.wikipedia.org/wiki/C%2B%2B14
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[4]: C++14 done
    От: zaufi Земля  
    Дата: 20.08.14 01:12
    Оценка:
    Здравствуйте, uzhas, Вы писали:

    U>Здравствуйте, zaufi, Вы писали:


    Z>>поддержка раскраски синтаксиса по редакторам/IDE:

    Z>>kate/kdevelop

    U>не подчеркивает опечатку в "miliseconds"


    kate умеет проверять spelling в комментах и строковых литералах... но как правило они полны всяких имён переменных и прочих не очень английских слов, поэтому по умолчанию я её держу выключенной, чтобы не раздражали неизвестные "слова" %)
    Re: decltype(auto)
    От: flаt  
    Дата: 20.08.14 03:52
    Оценка:
    Где почитать про decltype(auto) дополнительно?

    N3638 Return type deduction for normal functions как-то не воспринимается
    Re[2]: decltype(auto)
    От: Abyx Россия  
    Дата: 20.08.14 09:53
    Оценка: 12 (3)
    Здравствуйте, flаt, Вы писали:

    F>Где почитать про decltype(auto) дополнительно?


    F>N3638 Return type deduction for normal functions как-то не воспринимается


    тут надо понять чем отличается "auto x = e;" от "decltype(e) x = e;"
    (у auto есть decay, у decltype нету)

    а decltype(auto) это более удобная форма decltype(e)
    In Zen We Trust
    Отредактировано 25.08.2014 9:27 Abyx . Предыдущая версия .
    Re: C++14 done
    От: enji  
    Дата: 21.08.14 18:46
    Оценка:
    Здравствуйте, uncommon, Вы писали:

    все классно, особенно полиморфные лямбды. Но все равно неясно, зачем писать [](auto x, auto y) { return x+y;}, почему не просто [](x, y){ return x+y; }
    Re[2]: C++14 done
    От: uncommon Ниоткуда  
    Дата: 22.08.14 03:53
    Оценка: 26 (4)
    Здравствуйте, Dair, Вы писали:

    D>Блин, я и 11 так и не изучил по-человечески, а уже 14...


    По новым возможностям библиотеки C++14 есть хорошая презентация (pdf).
    Re[2]: C++14 done
    От: Alexander G Украина  
    Дата: 22.08.14 08:50
    Оценка:
    Здравствуйте, enji, Вы писали:

    E>почему не просто [](x, y){ return x+y; }


    как для "[](x,y)" понять, что x и y — имена параметров, а не типы?
    (просто исходя из того, что типов x и y не видно — слишком хрупко)
    Русский военный корабль идёт ко дну!
    Re[3]: C++14 done
    От: enji  
    Дата: 22.08.14 09:56
    Оценка:
    Здравствуйте, Alexander G, Вы писали:

    AG>Здравствуйте, enji, Вы писали:


    E>>почему не просто [](x, y){ return x+y; }


    AG>как для "[](x,y)" понять, что x и y — имена параметров, а не типы?

    AG>(просто исходя из того, что типов x и y не видно — слишком хрупко)

    [](x): x — параметр
    [](x у): x — тип, у — параметр
    [](x _): x — тип, _ — параметр, о неиспользуемости которого компилятор не ругается.

    Некоторая несовместимость с обычными функциями, но зато 5 символов экономии на параметр в коротких лямбдах рулят...

    [](x, y) { return x+y; }
    [](auto x, auto y) { return x+y; }

    а если еще сделать так, что для лямбд из одного выражения return "подразумевается", то получается вообще супер

    [](x, y) { x+y; }

    скобки по моему тоже можно опустить

    [](x, y) x+y;

    и мы практически пришли к
    x, y -> x+y
    Re[4]: C++14 done
    От: Alexander G Украина  
    Дата: 22.08.14 10:25
    Оценка: +1
    Здравствуйте, enji, Вы писали:

    ...

    E>скобки по моему тоже можно опустить


    E>[](x, y) x+y;


    E>и мы практически пришли к

    E>x, y -> x+y

    Не думаю, что ради однострочных лямбд стоит так ломать синтаксис языка.
    Тем более, краткость однострочных полиморфных лямбд решается на библиотечном уровне. Код с boost.lambda:
    _1+_2
    Русский военный корабль идёт ко дну!
    Re[5]: C++14 done
    От: enji  
    Дата: 22.08.14 16:50
    Оценка:
    Здравствуйте, Alexander G, Вы писали:

    AG>Тем более, краткость однострочных полиморфных лямбд решается на библиотечном уровне. Код с boost.lambda:

    AG>
    _1+_2


    ага, а так сделай на boost::lambda
    x.func(y)

    будет мягко говоря нечитаемо...
    Re: C++14 done
    От: PM  
    Дата: 23.08.14 22:44
    Оценка: 37 (2) :)
    Здравствуйте, uncommon, Вы писали:

    U>Голосование по C++14 закончилось, и стандарт отправлен на печать: https://isocpp.org/blog/2014/08/we-have-cpp14


    Шутка про валидный С++ код
    auto (auto) { return auto; }
    стала ближе к реальности:

      Скрытый текст
    //Author Manu Sánchez (Manu343726). Aug 2014
    
    //Everything started from this: http://stackoverflow.com/questions/25338795/is-there-a-name-for-this-tuple-creation-idiom
    //Now, play with C++14!
    
    #include <utility>
    #include <iostream>
    
    auto tuple = [](auto... args)
    {
        return [=](auto f){ return f(args...); };  
    };
    
    auto map = [](auto... args)
    {
        return [=](auto f){ return tuple(f(args)...); };  
    };
    
    auto cat_raw = []( auto... largs )
    {
        return [=](auto... rargs){ return tuple(largs...,rargs...); }; 
    };
    
    auto rcat = []( auto... largs )
    {
        return [=]( auto rhs ){ return rhs(cat_raw)(largs...); };
    };
    
    
    
    auto print_tuple = [](auto t){ return t(map)( [](auto e){ std::cout << e << " "; return e; } ); };
    
    
    int main()
    {
        auto t = tuple(5u,6,7l,8.0)(rcat)(tuple(1u,2,3l,4.0));
        
        print_tuple(t);
    }


    Найдено на Reddit
    Re[2]: C++14 done
    От: Кодт Россия  
    Дата: 25.08.14 08:58
    Оценка:
    Здравствуйте, PM, Вы писали:

    PM>Найдено на Reddit


    О! Это ж те самые продолжения, о которых столько говорили большевики.
    Теперь можно разгуляться и налепить монад и аппликативных фунторов от души.
    Перекуём баги на фичи!
    Re[3]: C++14 done
    От: jazzer Россия Skype: enerjazzer
    Дата: 25.08.14 09:12
    Оценка: :)
    Здравствуйте, Кодт, Вы писали:

    К>Здравствуйте, PM, Вы писали:


    PM>>Найдено на Reddit


    К>О! Это ж те самые продолжения, о которых столько говорили большевики.

    К>Теперь можно разгуляться и налепить монад и аппликативных фунторов от души.

    А потом придут сами-знаете-кто и скажут, что С++ — отстой, и шаблонное метапрограммирование монады и аппликативные функторы в С++14 — просто побочный эффект лямбд, которые создавались сааавсем для другого
    jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    Re[4]: C++14 done
    От: Кодт Россия  
    Дата: 25.08.14 09:56
    Оценка: :)
    Здравствуйте, jazzer, Вы писали:

    J>А потом придут сами-знаете-кто и скажут, что С++ — отстой, и шаблонное метапрограммирование монады и аппликативные функторы в С++14 — просто побочный эффект лямбд, которые создавались сааавсем для другого


    Ну мы-то знаем, что лямбды создавались для эмблемы халфлайфа, а все эти Чёрчи — выдумка черчилля в восемнадцатом году.
    Перекуём баги на фичи!
    Re[4]: C++14 done
    От: Ku-ku  
    Дата: 26.08.14 09:46
    Оценка:
    Здравствуйте, enji, Вы писали:

    AG>>как для "[](x,y)" понять, что x и y — имена параметров, а не типы?

    AG>>(просто исходя из того, что типов x и y не видно — слишком хрупко)

    E>[](x): x — параметр


    Совместимость с C++11 — в унитаз?

    E>Некоторая несовместимость с обычными функциями, но зато 5 символов экономии на параметр в коротких лямбдах рулят...


    E>[](x, y) { return x+y; }

    E>[](auto x, auto y) { return x+y; }

    В дженерик коде часто приходится обеспечивать сохранность value category — lvalue/rvalue.

    [](auto &&x, auto &&y) -> decltype(FORWARD(x)+FORWARD(y)) { return FORWARD(x)+FORWARD(y); }

    В итоге auto не сильно много прибавляет к суммарной длине в процентном соотношении.

    E>а если еще сделать так, что для лямбд из одного выражения return "подразумевается", то получается вообще супер


    E>[](x, y) { x+y; }


    Это снова ломает совместимость с C++11, потому что тип возврата с void может поменяться на что-то другое. И я не уверен, что многие будут счастливы писать

    [](x, y) -> void { foo(x+y); }

    всякий раз, когда нужен именно void.

    E>скобки по моему тоже можно опустить


    E>[](x, y) x+y;


    Проблема такой нотации в том, что её тяжело парсить. Как ты предлагаешь интерпретировать выражение ниже?

    f = [](x, y) noexcept(x+y) — (x+y), some_function();
    Отредактировано 26.08.2014 9:49 Ku-ku . Предыдущая версия .
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.