在C++ 17中,"std :: is_callable"是否替换为"std :: is_invocable"?

xml*_*lmx 13 c++ standards language-design type-traits c++17

cppref已删除了入口页面std::is_callable,并std::is_invocable改为使用入口页面.

但是,std::is_callable仍可在Visual Studio 2017中使用.

std::is_callable正式[ 取出更换| |不赞成用] std::is_invocable在C++ 17?

Pra*_*ian 14

是的,is_callableis_invocable按照p0604r0中的描述重命名.该文件包括该决定的理由:

重命名is_callableis_invocable: is_callable将是特征的最自然的名称,它回答了函数调用表达式是否有效的问题,这是表达式的严格子集,INVOKE支持,此外更改的名称is_invocable更清楚地表达其含义.释放名称is_callable使我们将来可能会引入纯粹的is_callable特征.

  • @isanae - 好吧,invokable不是英文单词,但是可以调用. (5认同)
  • @isanae 因为它是`protected` 和`class` 不是`prouetekted` 和`klasse` 因为很多人使用英语,一个字母的差异只会让人烦恼 (2认同)
  • @isanae什么不是英文?*Invocable*是*invoke*的形容词形式,在语言中没有*invokable*这样的单词.所以`is_invocable`确实意味着*它是你可以"调用"的东西吗?*. (2认同)