(Im)perfect Forwarding
- 引数は5個まで (実装)
- 試しに10個にするとコンパイル時間が大変なことになった
- これもただの実験コードというわけではなく、
- Boost.Lambda functorを一時オブジェクトを実引数に取れるように変換できる
- lambda::ret<>に相当する機能を付けられる
- 関数オブジェクトの型の名前はBoost.Protoを見るとopという名前空間に置いているようだ
[]#include[] []<boost/lambda/core.hpp>[]
[]#include[] []<boost/utility/result_of.hpp>[]
[]#include[] []<pstade/forward.hpp>[]
[]#include[] []<pstade/reference.hpp>[]
[]#include[] []<pstade/result_of_lambda.hpp>[]
[]using[] []namespace[] []pstade[][];[]
[]namespace[] []lambda[][] = [][]boost[][]::[][]lambda[][];[]
[]void[] []test[][]()[]
[]{[]
[]// lambda::_1(12); // error[]
[]lambda[][]::[][]_1[][]([][]12[][]|[][]to_reference[][]); [][]// ok[][]boost[][]::[][]result_of[][]<[]
[]boost[][]::[][]result_of[][]<[][]op_forward[][]([][]op_lambda_1[][])>::[][]type[][]([][]int[][])[]
[] >::[][]type[] []x[][] =[]
[]forward[][]([][]lambda[][]::[][]_1[][])([][]12[][]);[][]BOOST_CHECK[][]( [][]x[][] == [][]12[][] );[]
[]}[]