SFINAE倒是很自然
int f(int);
float f(float);
template<typename T> typename T::result_type f(T);
short n = (short)f((short)0);
没有SFINAE的话,最后一行就出错了。你对某些T加一个重载,结果重载对其它类型都不可用了。这不能接受。
除非你强制使用concept,把模板从编译时的无类型(“动态类型”)语言改成有类型(“静态类型”)语言。或者把重载改成不在编译时解决。
不然,“无类型元语言+编译时重载”这个组合就需要类似SFINAE的东西。
正如语言既有无类型也有有类型一样,元语言选择无类型也不见得错吧。
【 在 allegro 的大作中提到: 】
: C++现在的复杂度不能忍了.正确的抽象会让语言规则变得简单.
: 现在的SFINAE啊type_traits啊真的是正确的抽象吗?
: C++要么新出来个大佬简化挽救这一切.
: ...................
--
FROM 58.37.61.*