2014-12-11

Tarse Range-Based forがClangから取り除かれていた

C++1zには、N3994: Tarse Range-based forが提案されていた。これは、Range-based forで型を書かずにすむようになる小粒な新機能だ。

任意のコンテナーを受け取って、その要素をすべて標準出力に出力する関数テンプレートを書くとする。これは以下のように書ける。

template < typename Container >
void print( Container const & c )
{
    for ( typename Container::value_type & elem : c )
        std::cout << elem << '\n' ;
}

いちいち型を書くのが面倒だ。これにはautoを使えばよい。

template < typename Container >
void print( Container const & c )
{
    for ( auto && elem : c )
        std::cout << elem << '\n' ;
}

しかし、auto &&すら書くのが面倒ではないか。N3994では、auto &&を省略できる新機能、Tarse Range-based forを提案していた。これはClangとGCCで実装されていたが、今試すとSNV HEADのClangでは動かない。はてどうしたことか。

調べると、C++1zには採用されない見込みになったので、取り除かれたそうだ。

[llvm-project] Revision 222865

ドワンゴ広告

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

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

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

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

2 comments:

Anonymous said...

s/tarse/terse/g

Anonymous said...

VC++のベータ版も「リリース版では取り除く予定」となっていました。ご参考まで。