lambda functorはassignableじゃない

  • default-constructibleではないどころかassignableじゃなかった
  • Boost.Lambdaで作ったfilter_iteratorは不正
  • もちろんcopy-constructibleではあるので、それからassignableにして、さらにboost::optionalでdefault-constructibleにする
    • 型へのadaptorのようだ
  • ソースコード

[]template[][]< [][]class[] []Iterator[][] >[]
[]void[] []foo[][]([][]Iterator[] []x[][])[]
[]{[]
[]Iterator[] []y[][];[]
[]y[][] = [][]x[][];[]
[]}[]

[]void[] []test[][]()[]
[]{[]
[]std[][]::[][]string[] []rng[][]([][]"axax"[][]);[]

[]/* error:[]
[] ::foo([]
[] boost::make_filter_iterator([]
[] boost::lambda::_1 != 'x',[]
[] boost::begin(rng),[]
[] boost::end(rng)[]
[] )[]
[] );[]
[]*/[]

[] ::[][]foo[][]( [][]pstade[][]::[][]oven[][]::[][]make_regularize_iterator[][]([]
[]boost[][]::[][]make_filter_iterator[][]([]
[]boost[][]::[][]lambda[][]::[][]_1[][] != [][]'x'[][],[]
[]boost[][]::[][]begin[][]([][]rng[][]),[]
[]boost[][]::[][]end[][]([][]rng[][])[]
[] )[]
[] ) );[]
[]}[]