3
#include <range/v3/all.hpp>
using namespace ranges;
template<typename I, typename O>
tagged_pair<tag::in(I), tag::out(O)>
f(I i, O o)
{
return { i, o };
}
int main()
{
char buf[8]{};
f(std::begin(buf), std::end(buf));
}
コードはrange-v3を使用し、clang
でコンパイルできます。関数呼び出しはどのようにコンパイル時の型を与えますか?
しかし、私はなぜtagged_pair<tag::in(I), tag::out(O)>
が合法であるのか理解できません。 I
は型で、tag::in(I)
も型であり、tag::in
はマクロではありません。tag::in(I)
はコンパイル時にどのように型を与えますか?
はまたタイプで機能I
を受け入れ、tag::in
を返す、のタイプですhttp://en.cppreference.com/w/cpp/experimental/ranges/algorithm/copy