C++ 11を無視するオブジェクトがstd::ignore
と呼ば紹介:簡潔にするために要件::
const /* unspecified */ ignore;
、私が言うことができるものから
typedef decltype(std::ignore) T;
を聞かせて、T
のための唯一の要件は、ということです [C++ 11,20.4.2.4:7]という仕様のため、CopyAssignable
です。
g ++ - 4.8では、がさらにDefaultConstructible
(たとえば、T x;
コンパイル)であることがわかります。この実装定義の動作ですか?
(私が見逃しているT
上の他の要件がある場合は、手の込んだしてください。)
http://stackoverflow.com/questions/16227391/please-explain-this-code-that-uses-stdignore –
これは興味深い質問です。その背後にある動機は何ですか? std :: ignoreの目的はタグの一種であるプレースホルダであることは明らかです。特にstd :: tieではそれ以上の用途はありません。 –
実用的なアプリケーションはありません。私は、ユーザが「ダミー」イテレータを圧縮することを可能にする「zip」イテレータ(例えば、ブーストを参照)を作成しています。1つのユースケースは、入力イテレータがzipイテレータで、出力イテレータが(入力の)タプル要素のサブセットを持つzipイテレータである場合、 'std :: copy_if'をサポートしています。 'operator * 'の戻り値が' T '型のオブジェクトを含むタプルに変換可能でなければならないので、' ignore'd要素を持つzipイテレータが 'InputIterator'として使われるとどうなりますか? (恐らく 'DefaultConstructible'は必要以上に強い要求です。) – nknight