Why `is_constructible<function<int(int)>, int(*)(int,int)>::value` is true under VC2015RC

房东的猫 提交于 2020-01-11 12:30:12

问题


#include <functional>
using namespace std;

int main()
{
   static_assert(is_constructible<function<int(int)>, int(*)(int,int)>::value, "error");
}

The code doesn't compile with GCC and Clang, but passed with Visual C++ 2015 RC.

Is this standard compliant behavior or just a bug?


回答1:


std::function's constructor used to accept everything under the sun (it was a template<class F> function(F f)).

Then it got constrained in the standard (by LWG issue 2132), but implementing that constraint requires expression SFINAE, which Microsoft's compiler doesn't yet support.



来源:https://stackoverflow.com/questions/30498829/why-is-constructiblefunctionintint-intint-intvalue-is-true-under

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!