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