本の虫

著者:江添亮
ブログ: http://cpplover.blogspot.jp/
メール: boostcpp@gmail.com
Twitter: https://twitter.com/EzoeRyou
GitHub: https://github.com/EzoeRyou

アマゾンの江添のほしい物リストを著者に送るとブログ記事のネタになる

筆者にブログのネタになる品物を直接送りたい場合、住所をメールで質問してください。

Clangが現在実装しているC++1z機能

注意:この記事の内容はC++17の正式な規格では変わっている可能性が高い。

Clang - C++1z, C++14, C++11 and C++98 Status

C++1z、あるいはC++17と呼ばれているC++の次期メジャーアップ規格に提案中の新機能のうち、Clangがすでに実験的実装を行っているものがある。これは、コンパイラーオプションに-std=c++1zを指定することで使うことができる。実装されている機能は、いずれも、まだドラフトにすら入っていない、提案論文しかない機能である。

本記事の執筆現在、Clangの-std=c++1zで実験的実装がされている提案は以下の通り。

N3928: static_assert with no message

C++11で追加されたstatic_assertは、必ず文字列リテラルを指定しなければならない。

// エラー
static_assert( true ) ;

// OK
static_assert( true, "" ) ;

文字列リテラルを指定したくない場合でも、必ず文字列リテラルを書かなければならない。これは極めて面倒で冗長だ。

そこで、N3928提案では、文字列リテラルを取らないstatic_assertの文法を追加する。

// OK, N3928提案
static_assert( true ) ; 

N3981: Disabling trigraph expansion by default

既存の巨大なコードベースを検索したところ、トライグラフは一切意図的に使われていないことが判明した。トライグラフが使われているのは、トライグラフによる置換を防ぐためのエスケープと、コンパイラーやCプリプロセッサー実装のテストコードの中だけであった。トライグラフには現実の需要がない上、コードを書く妨げになっている。N3981では、トライグラフを取り除く提案をしている。

以下のコードを考える。


#include <iostream>

int main( )
{
    std::cout << "??=" << '\n' ;
}

このコードを実行した結果、現行規格ならば、"#"が出力され、N3981提案では、"??="が出力される。

N3994: Terse range-based for loops

rage-based for loop、for ( elem : range )を、for ( auto && elem : range )に置き換える軽いシンタックスシュガーの提案。

// N3994提案
int main()
{
    char range[] = "hello" ;

    // for ( auto && elem : range ) と同等 
    for ( elem : range )
    {
    // 処理
    }

}

なぜauto &&なのかについては、色々と理由があるので、詳しくは論文を参照。

N4051: Allow typename in a template template parameter

テンプレートテンプレートパラメーターは、文法上、classキーワードしか使えなかった。

// 現行規格
template <
    template < typename T >
    class U // ここにtypenameキーワードは使えない
>
struct X { } ;

テンプレートテンプレートパラメーターに渡せる型がクラス型しかなかった昔はともかく、今は、エイリアステンプレートがある。そこで、typenameキーワードも許可する提案。

// N4051提案
template <
    template < typename T >
    typename U // classでもtypenameでもよい
>
struct X { } ;

以上、小粒な新機能の実装が多い。これらは実装がそれほど難しくもないし、おそらくは、ドラフト入りして制式採用される機能だと思うが、最初に警告したように、まだドラフト入りすらしていない機能であるので、注意されたい。

ドワンゴ広告

この記事はドワンゴ勤務中に書かれた。

今日、社内のくだらない雑談チャットで、ドワンゴに必要なのは社内猫であるという意見が出た。ネコアレルギーの社員との兼ね合いは難しいだろうが、猫のいる職場は、確かに生産性が下がるのですばらしい。あれ? なにか違う気がする。

ドワンゴは本物のC++プログラマーを募集しています。

採用情報|株式会社ドワンゴ

CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0