C++14: Through the Looking Glass

Sign in to queue

Description

“The time has come,” the ISO said, “To talk of many things:  Of move-capture—and literals— Of making lambdas sing— And why deduction is so hot— And if digits should grow wings?”

So have you heard of the next C++ Standard? No, it is not C++11. Even though C++11 has just been ratified, C++14 will likely replace C++11 by next year. By now, we have enough experience with C++11 to know where we are missing various fingers and toes such as:

  • Why do we not have move capture in lambdas? 
  • How about some real user-defined literal suffixes? 
  • Why did we stop with monomorphic lambdas? 
  • If lambda returns can be deduced, why not normal functions? 
  • Could we get digit separators?

C++14 will be more than a bug-fix release, and will contain some important enhancements on top of C++11. It will remove some of the major annoyances from C++11, that we already know of. But more importantly, how will this change the language, library and some important idioms?

 

Download:

Source Code

Day:

2

Code:

009

Embed

Download

Download this episode

Download:

The Discussion

  • User profile image
    khourig

    What about back tick (`) as a number group separator?

    This could work for decimal (1`000`000) or hex (0xFFFF`0000) literals. Also, the proposed binary literals (0b0101`1000). If it were an ignored part of the number syntax, it would also make column alignment easier within tables.

    static const char table[] = {
      ``0, ``1, ``2,
      `10, `11, `12,
      100, 101, 102
    };

  • User profile image
    aklimkin

    Not sure that issue with a number group separator worth the effort... In a few cases where you would really need it, you can use preprocessor.

    #include <boost/preprocessor/cat.hpp>
    #include <boost/preprocessor/facilities/empty.hpp>
    #include <boost/preprocessor/variadic/size.hpp>
    #include <boost/preprocessor/control/if.hpp>
    #include <boost/preprocessor/facilities/empty.hpp>
    
    #define N(X, ...) BOOST_PP_CAT(X, BOOST_PP_IF(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), BOOST_PP_EMPTY(), N(__VA_ARGS__)))
    
    int n = N(100,200,100);
    

     

  • User profile image
    vittoriorom​eo

    I'm one of those people who would greatly prefer `strong typedefs` to user-defined literals... is there any proposal already?

  • User profile image
    Matt_PD

    @vittorioromeo:

    Yes, see N3741, "Toward Opaque Typedefs for C++1Y, v2" by Walter E. Brown:
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3741.pdf

  • User profile image
    berkus

    What would you guys think about named function arguments?

    A proposal for syntax I've got here https://github.com/berkus/cpp_named_args

  • User profile image
    pham

    Since there is new user defined literal, why don't you use the string + suffix + comma as separator and the compiler will figure it out at compile time for long number const

Add Your 2 Cents