Search code examples
c++c++11visual-c++type-traitsstd-function

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


#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?


Solution

  • 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.