有没有可能对std::bind
给出的参数进行静态类型检查? 我很想使用它,但它几乎接受任何内容。例如,std::bind(1,2);
被接受。或者,我可以使用std::result_of
来实现自己的解决方案。
有没有可能对std::bind
给出的参数进行静态类型检查? 我很想使用它,但它几乎接受任何内容。例如,std::bind(1,2);
被接受。或者,我可以使用std::result_of
来实现自己的解决方案。
我还不确定bind
是否可以可靠地拒绝这种结构。但如果可以的话,那么这将是一种扩展。
标准中的Requires
子句告诉客户端为避免未定义的行为应该做什么。它没有告诉供应商要符合什么要求。所以std::bind(1,2)
是未定义的行为,它可能会做任何事情。引起编译时错误会是一种好的未定义行为,但并不是必需的。
std::bind(1,2)
;尽管它也接受带有太少参数的函数(虽然零个参数会报错)。正如您所描述的,一个编译器供应商可能会以一种方式定义bind
,而另一个则以另一种方式定义。谢谢。 - user2023370
auto qq = std::bind(1,2);
没有给我任何错误。 - user2023370bind
本身应该已经失败了。看起来GCC 4.7的libstdc++正确地使用SFINAE,如果bind
的参数不可调用,则会被排除在外。 - Xeo