std :: pair的通用lambda参数

joh*_*ers 8 c++ c++14

我试图看看这是否可能在C++ 14泛型lambda中,但我找不到正确的方式表达它(或者可能是不可能的).简化的例子是:

auto confirmOperation = [](auto pr){
  assert(pr.second);
};
Run Code Online (Sandbox Code Playgroud)

我们的想法是,如果你通过它的std::pair其中second一个bool(比如什么是从返回emplace功能),它可以看看这个布尔.

如果这是一个模板参数,我可以明确地显示该pair对的类型是通用的,但我不认为这是可能的lambda?因此,我将整个参数标记为通用,因此编译器似乎无法推断出我将它传递给地图的返回emplace().

有什么办法吗?

eca*_*mur 14

您可以使用enable_if以下方法约束lambda :

auto confirmOperation = [](auto pr) ->
    std::enable_if_t<std::is_same<decltype(pr.second), bool>::value> {
  assert(pr.second);
};
Run Code Online (Sandbox Code Playgroud)

例子.

  • 虽然整洁,但这是对OP的"问题"的回答?简而言之,为什么你认为这是OP所要求的? (3认同)