这是我迁移到VS2017的代码库的简单版本。 以下代码在VS2013和英特尔C ++编译器2017更新4中编译,但在VS2013中不编译。
Venue.near([40.71, -100.23], 20) # venues within 20 miles of a point
我在构造函数类的定义上遇到错误:
main.cpp(20):错误C2440:'专业化':无法转换为' Class *(__ cdecl *)(Args ...)'到'班级*(__ cdecl *)(Args ...)' 注意:范围内具有此名称的函数都不匹配目标类型 注意:请参阅类模板实例化'构造函数'正在编制
如果我直接从S1或S2继承Constructor,则错误消失。所以我认为问题在于std :: conditional definitions。
有什么想法吗?感谢。
答案 0 :(得分:0)
在尝试多次尝试重写代码之后,我的一位同事提出了获胜版本:
template<typename F, F f>
struct BaseType_
{
using type = typename std::conditional<std::is_member_function_pointer<F>::value, S1<F, f>, S2<F, f>>::type;
};
template<typename F, F f>
using BaseType = typename BaseType_<F, f>::type;
template<class Class, typename... Args>
struct Constructor : BaseType_<Class*(*)(Args...), call_constructor<Class, Args...>>::type
{
using ReturnType = Class *;
};
也许这可以通过延迟继承的实例化来解决问题 码。我们不确定:))