为什么'is_constructible::value'在VC2015RC下为true 没有用GCC和Clang编译,而是用Visual C++ 2015 RC .传递。
这是符合标准的行为还是仅仅是一个bug?std::function的构造函数用于接受阳光下的一切,它是一个模板functionF 然后,它在标准中受到约束,但实现该约束需要表达式SFINAE,它。std::function的构造函数用于接受太阳下的所有内容,它是一个模板函数f为什么'is_constructible::value'在VC2015RC下为true 没有用GCC和Clang编译,而是用Visual C++ 2015 RC .传递。,c++,c++11,visual-c++,typetraits,std-function,C++,C++11,Visual C++,Typetraits,Std Function,这是符合标准的行为还是仅仅是一个bug?std::function的构造函数用于接受阳光下的一切,它是一个模板functionF 然后,它在标准中受到约束,但实现该约束需要表达式SFINAE,它。std::function的构造函数用于接受太阳下的所有内容,它是一个模板函数f 然后它在标准中受到约束,但实现该约束需要表达式SFINAE,这是另一个表达式SFINAE问题。但我仍然有问题,从C++标准的角度来看,这种行为是否正确?或者它在C++11中有效,在C++14中无效?@Windoze根据C+
然后它在标准中受到约束,但实现该约束需要表达式SFINAE,这是另一个表达式SFINAE问题。但我仍然有问题,从C++标准的角度来看,这种行为是否正确?或者它在C++11中有效,在C++14中无效?@Windoze根据C++11标准发布,传递给定签名不可调用的内容会破坏一个Requires子句,即UB,因此任何答案都是正确的。在C++14中,“可构造”应该为false。当使用类型实例化时,它是UB已经存在,还是只有在实际计算构造函数调用时才是UB?@johanneschaub litb我认为实例化就足够了。[res.on.functions]/2,bullet 2.3.@windoze我认为std::result_两种方法都有效,如果不表达sfinae,在2015年甚至2013年都是对sfinae友好的,所以sfinae甚至不是这里的借口。Geeee…另一个表达sfinae问题。但我仍然有问题,从C++标准的角度来看,这种行为是否正确?或者它在C++11中有效,在C++14中无效?@Windoze根据C++11标准发布,传递给定签名不可调用的内容会破坏一个Requires子句,即UB,因此任何答案都是正确的。在C++14中,“可构造”应该为false。当使用类型实例化时,它是UB已经存在,还是只有在实际计算构造函数调用时才是UB?@johanneschaub litb我认为实例化就足够了。[res.on.functions]/2,bullet 2.3.@windoze我认为std::result_两种方法都有效,如果不是在2015年甚至2013年表达sfinae,它对sfinae是友好的,所以在这里表达sfinae甚至不是借口。
#include <functional>
using namespace std;
int main()
{
static_assert(is_constructible<function<int(int)>, int(*)(int,int)>::value, "error");
}