问题
#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