Test if a lambda is stateless?

后端 未结 5 1491
春和景丽
春和景丽 2021-02-07 12:38

How would I go about testing if a lambda is stateless, that is, if it captures anything or not? My guess would be using overload resolution with a function pointer overload, or

5条回答
  •  南旧
    南旧 (楼主)
    2021-02-07 13:23

    #include  // std::true_type, std::false_type
    #include      // std::declval
    
    template
    auto is_captureless_lambda_tester(int)
    -> decltype( +std::declval(), void(), std::true_type {} );
    
    template
    auto is_captureless_lambda_tester(long)
    -> std::false_type;
    
    template
    using is_captureless_lambda = decltype( is_captureless_lambda_tester(0) );
    

    Does not work for polymorphic lambdas, require as a precondition that the argument be a closure type. (E.g. is_captureless_lambda is std::true_type.)

提交回复
热议问题